关于DataFrame中fillna()未填充D列索引1值的技术咨询
为什么索引1的D列值未被
fillna('New_Value')填充? 兄弟,一眼就能看出问题所在——索引1的D列值不是真正的缺失值!它是带引号的字符串'None',而pandas的fillna()只认两种「真·空值」:Python原生的None对象,以及numpy的np.NaN。
具体分析:
- 看你构造DataFrame的代码,索引1的D列写的是
'None'(带单引号),这是一个普通的字符串,长度为4,完全不属于缺失值范畴; - 而那些被成功填充的空值,比如索引0的A列
None、索引2的B/C列None,都是不带引号的Python原生None;索引0的E/H列、索引4的E/H列是np.NaN,这些才是fillna()会识别并处理的目标。
验证方法:
你可以运行下面的代码,查看D列每个元素的类型,就能直观看到差异:
print(df['D'].apply(type))
输出大概是这样:
0 <class 'str'> 1 <class 'str'> 2 <class 'bool'> 3 <class 'str'> 4 <class 'str'> Name: D, dtype: object
很明显,索引1的D元素是字符串类型的'None',和其他真正的空值完全不是一回事。
解决办法:
如果想把字符串'None'也替换成'New_Value',可以先把它转换成真正的缺失值,再执行填充:
import numpy as np import pandas as pd # 先把字符串'None'替换为np.NaN df = df.replace('None', np.NaN) # 再统一填充所有缺失值 df = df.fillna('New_Value')
这样就能把所有你认为是「空值」的内容都替换成目标值了。
内容的提问来源于stack exchange,提问作者Ayyappa Bandi
相关产品推荐
相关产品推荐

