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

在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
点赞