在np.where子句之后,在pandas中无法识别NaN。为什么?或者这是一个错误?

时间:2016-01-12 19:54:39

标签: python numpy pandas

在np.where子句之后,pandas中无法识别NaN。为什么?或者这是一个错误?

此代码的最后一行应为“True”

PV

1 个答案:

答案 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