使用pandas fillna填充空值后仍存在空值的问题
解决pandas fillna后仍存在空值的问题
嘿,我之前也遇到过一模一样的情况,折腾了好一会儿才找到原因,给你梳理下可能的问题和解决办法:
1. 别踩「inplace=True + 赋值」的坑
你提到尝试过df["A"] = df["A"].fillna("Global", inplace=True)这种写法,这其实是个典型错误!当你给fillna加上inplace=True时,这个方法会直接修改原DataFrame,返回值是None。所以你这么写相当于把None赋值给了df["A"],反而会产生更多空值!
正确的写法二选一就行:
- 只用inplace=True,不赋值:
df["A"].fillna("Global", inplace=True) - 赋值但不用inplace:
df["A"] = df["A"].fillna("Global")
2. 你的「空值」可能不是pandas识别的标准空值
如果上面的写法你已经试过了,但还是有非零空值,那大概率是数据里的“空值”不是pandas默认认的np.nan或pd.NA,而是字符串类型的空值(比如"")、空格(" ")或者其他自定义占位符(比如"N/A")。
排查方法:
先看看这些列的唯一值,确认是不是有假空值:
# 查看A-D列的所有唯一值 for col in ["A", "B", "C", "D"]: print(f"列{col}的唯一值:{df[col].unique()}")
解决办法:
先把这些假空值转换成标准的np.nan,再用fillna填充:
import numpy as np # 1. 把所有假空值替换成NaN(根据你实际的假空值类型调整列表内容) replace_values = ["", " ", "N/A", "NULL"] df[["A", "B", "C", "D"]] = df[["A", "B", "C", "D"]].replace(replace_values, np.nan) # 2. 批量填充空值 df[["A", "B", "C", "D"]] = df[["A", "B", "C", "D"]].fillna("Global")
3. 最后验证
填充完之后再用df.isnull().sum()检查,应该就能看到A-D列的空值数变成0了~
内容的提问来源于stack exchange,提问作者iprof0214
相关产品推荐
相关产品推荐

