在np.where子句之后,在pandas中无法识别NaN.为什么?或者这是一个错误?
这段代码的最后一行应该是“True”
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: a=pd.Series([1,np.nan])
In [4]: b=pd.DataFrame(["a","b"])
In [5]: b["1"]=np.where(
a.isnull(),
np.nan,
"Hello"
)
In [6]: b
Out[6]:
0 1
0 a Hello
1 b nan
In [7]: b[1].isnull()
Out[7]:
0 False
1 False
Name: 1, dtype: bool
最佳答案 你可以看看为什么你看看where的结果:
>>> np.where(a.isnull(), np.nan, "Hello")
array([u'Hello', u'nan'],
dtype='<U32')
因为您的其他值是一个字符串,所以将NaN转换为字符串并为您提供字符串数组结果. (你得到的确切dtype可能会有所不同,具体取决于你的平台和/或Python版本.)所以你根本没有在你的结果中有NaN,你只需要字符串“nan”.
如果你想在pandas中进行这种类型的映射(特别是改变dtypes的映射),通常最好使用像.map这样的pandas构造并避免陷入numpy,因为正如你所看到的那样,numpy往往会做无用的事情.必须解决冲突的类型.这是一个如何在熊猫中完成所有操作的示例:
>>> b["X"] = a.isnull().map({True: np.nan, False: "Hello"})
>>> b
0 X
0 a Hello
1 b NaN
>>> b.X.isnull()
0 False
1 True
Name: X, dtype: bool