使用pandas fillna填充缺失值遇类型不兼容警告,求原因及解决方法
问题解析与解决方法
警告原因
- 类型不兼容:你要填充的
"0%"是字符串类型,但目标数据列的 dtype 是float64(数值类型)。pandas 禁止直接给数值列填充字符串值,当前版本仅发出警告,未来会直接报错。 - 变量赋值错误:代码里用了
inplace=True,这个参数会直接修改原DataFrame,此时fill_data会被赋值为None,完全不符合你获取填充后数据的需求。
解决方法
根据你的需求分两种场景处理:
场景1:需要存储带百分比符号的文本
先把目标列转为字符串类型,再填充缺失值:
# 方式1:修改原DataFrame df['目标列名'] = df['目标列名'].astype(str) df['目标列名'].fillna("0%", inplace=True) # 方式2:生成新的DataFrame,不修改原数据 fill_data = df.astype(str).fillna("0%")
场景2:保留数值类型,仅显示为百分比
如果你的数据是比例数值(比如0.1代表10%),应该填充数值0,后续再格式化显示为百分比:
# 填充数值0,生成新的DataFrame fill_data = df.fillna(0) # 格式化显示为百分比(不改变原数据的数值类型) fill_data['目标列名'] = fill_data['目标列名'].apply(lambda x: f"{x*100}%")
额外注意
如果一定要用inplace=True,不要给变量赋值,因为它返回None:
df.fillna("0%", inplace=True) # 直接修改原df即可
内容的提问来源于stack exchange,提问作者Obiukwu Uchechi Patience
相关产品推荐
相关产品推荐

