如果 df.fillna('', inplace=True)
没有成功把 NaN 替换为空字符串,可能有以下原因:
✅ 正确语法(本身没问题):
df.fillna('', inplace=True)
这句代码是正确的,它应该把 所有列中的 NaN 替换为 ''
(空字符串) 。
🚨 常见原因分析:
1. DataFrame 实际没有 NaN,而是 None
或空字符串
fillna('')
只处理真正的np.nan
,不会处理None
(在某些情况下,尤其是 object 类型)或已存在的''
。- 你可以用
df.isna().sum()
检查每列里是否真的有 NaN。
2. 有些列是非字符串类型(如 float、int)
-
如果某列是数值类型(比如
float64
),你用空字符串填充,会导致 类型冲突,Pandas 会跳过或报错。✅ 解决办法是先把该列转成字符串:
df = df.astype(str).fillna('')
或只对对象类型列填充空字符串:
df[df.select_dtypes(include='object').columns] = df.select_dtypes(include='object').fillna('')
3. 你看见的 "nan" 其实是字符串 'nan'
-
某些场景(比如用
str()
转换列之后),NaN
变成了字符串'nan'
,不是np.nan
。✅ 可用以下方式替换掉:
df.replace('nan', '', inplace=True)
🔍 推荐你执行以下几步排查:
import numpy as np
# 1. 查看哪里是 NaN
print(df.isna().sum())
# 2. 如果你想统一所有 NaN、None、'nan' 都替换为空字符串
df = df.replace([np.nan, None, 'nan'], '')
# 或者更彻底一点,强转为字符串后替换:
df = df.astype(str).replace('nan', '')