在np.where子句之后,pandas中无法识别NaN。为什么?或者这是一个错误?
此代码的最后一行应为“True”
PV
答案 0 :(得分:7)
如果查看where
:
>>> np.where(a.isnull(), np.nan, "Hello")
array([u'Hello', u'nan'],
dtype='<U32')
因为您的其他值是字符串,where
也会将您的NaN
转换为字符串,并为您提供字符串数据结果。 (根据您的平台和/或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