加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在np.where子句之后,在pandas中无法识别NaN.为什么?

发布时间:2020-12-20 11:48:23 所属栏目:Python 来源:网络整理
导读:在np.where子句之后,在pandas中无法识别NaN.为什么?或者这是一个错误? 这段代码的最后一行应该是“True” In [1]: import pandas as pdIn [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.
在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读