微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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(),"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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐