我一直在尝试替换Pandas框架中缺少的值,但没有成功。我尝试了.fillna
方法,还尝试循环整个数据集,检查每个单元格并将NaN替换为选定的值。然而,在这两种情况下,Python执行脚本时没有抛出任何错误,但NaN值仍然存在。
当我深入挖掘时,我发现了对我来说似乎不稳定的行为,最好用一个例子来证明:
In[ ] X['Smokinginpregnancy'].head()
Out[ ]
Index
E09000002 NaN
E09000003 5.216126
E09000004 10.287496
E09000005 3.090379
E09000006 6.080041
Name: Smokinginpregnancy, dtype: float64
字符串
我知道这一列中的第一个项丢失了,pandas将其识别为NaN。事实上,如果我单独调用这个项,python会告诉我它是NaN:
In [ ] X['Smokinginpregnancy'][0]
Out [ ]
nan
型
然而,当我测试它是否是NaN时,python返回False。
In [ ] X['Smokinginpregnancy'][0] == np.nan
Out [ ] False
型
我怀疑当.fillna
被执行时,python会检查该项是否为NaN,但会返回一个False,所以它会继续执行,而不去理会单元格。
有谁知道是怎么回事吗?有什么解决方案吗?(除了在excel中打开csv文件,然后手动替换值。)
我使用的是Anaconda的Python 3发行版。
2条答案
按热度按时间dxxyhpgq1#
您正在执行:
字符串
这是 * 保证 * 返回
False
,因为所有NaN比较不等于一切由IEEE754标准:型
另请参阅here。您必须使用
math.isnan
来检查NaN:型
或
numpy.isnan
所以用途:
型
关于
pandas.fillna
,注意这个函数返回填充数组。也许你做了这样的事情:型
或者,你必须传递
inplace=True
来改变你正在调用方法的对象。g9icjywg2#
pandas中的
NaN
可以用函数pandas.isnull检查。我创建了布尔掩码,并返回NaN
值的子集。函数fillna可以用于一列
Smokinginpregnancy
(更多信息在doc中):字符串
或
型
警告:
有时候
inplace=True
可以忽略,最好不要用。-link,github,github 3 comments.一起来:
型
更多信息,为什么比较不起作用:
需要注意的是,在python(和numpy)中,nan不能比较相等性,但None可以。请注意,Pandas/numpy使用了
np.nan != np.nan
的事实,并将None
视为np.nan
。更多信息请参阅Bakuriu's
答案。型