pandas执行fillna(0)填充后iloc取数仍出现NaN值原因咨询
异常根因
- pandas的
fillna方法默认不会修改原始DataFrame,仅会返回一个完成空值填充的新对象。你执行df1.fillna(0)时看到的输出是临时返回的新对象内容,并没有改动原df1,原df1中第409行Marge列仍然是NaN值。 - 后续你基于未修改的原
df1用iloc提取列时,自然会取出NaN值,后续需要传入纯有效数值的操作(比如模型训练、数值计算等)检测到NaN后,就触发了你遇到的报错:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
修复方案
两种写法任意选择即可让填充生效:
- 将填充后的结果赋值覆盖原变量
df1 = df1.fillna(0)
- 调用时添加
inplace=True参数直接修改原始对象
df1.fillna(0, inplace=True)
内容的提问来源于stack exchange,提问作者Wynton Lam
相关产品推荐
相关产品推荐

