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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |