使用Pandas ffill()填充DataFrame缺失值失败的问题求助
解决pandas中ffill填充NaN失败的问题
你的代码填充失败主要有三个核心问题:
- NaN判断逻辑错误:在pandas里,
NaN == NaN的结果永远是False,用df['AL|ATFC|Year'] == float('NaN')根本无法识别缺失值,必须用df['AL|ATFC|Year'].isna()来检测NaN。 - where函数逻辑颠倒:
where的作用是「保留满足条件的原数值,将不满足条件的替换为第二个参数」。你原本想替换NaN,但代码中条件写的是匹配NaN,结果会保留NaN、替换非NaN值,完全和预期相反。 - 多余的axis参数:你是对单列做填充操作,不需要指定
axis=1(按行处理),这会导致逻辑混乱。
正确的填充代码
直接对目标列调用ffill()是最简洁高效的方式:
# 方式1:赋值回原列(推荐,避免原地修改的副作用) df['AL|ATFC|Year'] = df['AL|ATFC|Year'].ffill() # 方式2:原地修改 df['AL|ATFC|Year'].ffill(inplace=True)
如果非要用where函数修正(不推荐,属于绕弯写法):
df['AL|ATFC|Year'] = df['AL|ATFC|Year'].where(~df['AL|ATFC|Year'].isna(), df['AL|ATFC|Year'].ffill())
后续删除经纬度缺失行
填充完成后,用dropna()指定删除Latitude和Longitude列存在缺失值的行:
# 方式1:返回新DataFrame df = df.dropna(subset=['Latitude', 'Longitude']) # 方式2:原地修改 df.dropna(subset=['Latitude', 'Longitude'], inplace=True)
内容的提问来源于stack exchange,提问作者ezrix
相关产品推荐
相关产品推荐

