Pandas替换DataFrame列后源数据无空值却出现空值的原因排查
空值产生原因
pandas 的 DataFrame 赋值操作默认会基于行索引对齐匹配,而非直接按行的物理位置顺序赋值。
你出现的11个空缺(7032-7021=11)和电信流失数据集的典型预处理场景完全匹配:
- 原始电信数据集总共有7043行,其中11行
TotalCharges为空,删除这11行后得到7032行有效数据 - 如果你删除空值后没有执行
reset_index(drop=True)重置索引,那么生成的num_telecom的行索引会缺失被删除的11个索引值,保持和删除后的子集索引一致 - 赋值给仍保留原始连续索引(0~7031)的
telecom时,num_telecom不存在的11个索引位置就会被自动填充为NaN
验证方法
执行以下代码即可确认索引不匹配的问题:
print(telecom.index.equals(num_telecom.index))
如果输出为False即可证实是索引对齐导致的空值。
解决方案
两种方案任选其一即可:
- 赋值时取NumPy数组绕过索引对齐:
telecom[numVars] = num_telecom[numVars].values - 重置
num_telecom的索引后再赋值:num_telecom = num_telecom.reset_index(drop=True) telecom[numVars] = num_telecom[numVars]
内容的提问来源于stack exchange,提问作者iambose
相关产品推荐
相关产品推荐

