如何用.fillna填充特定值?代码致load_weight列全为None的问题排查
问题分析与解决
错误原因
inplace=True的误用:当你在fillna中使用inplace=True时,该方法会直接修改原数据并返回None。你把这个None赋值给了整个load_weight列,导致整列都变成了None。- 赋值逻辑错误:你的代码试图将筛选后的整个DataFrame(包含所有列)处理后的值,赋值给
load_weight列,这完全不符合你只想填充特定行的load_weight列的需求。
正确代码写法
写法一:直接定位目标列填充
df.loc[(df["dropoff_site"] == "HORNSBY BEND") & (df['load_type'] == "BRUSH"), "load_weight"] = df.loc[(df["dropoff_site"] == "HORNSBY BEND") & (df['load_type'] == "BRUSH"), "load_weight"].fillna(1000)
写法二:用变量简化条件(更易读)
# 定义筛选条件 mask = (df["dropoff_site"] == "HORNSBY BEND") & (df['load_type'] == "BRUSH") # 仅对目标行的load_weight列填充NaN值 df.loc[mask, "load_weight"] = df.loc[mask, "load_weight"].fillna(1000)
说明
- 上述代码先通过条件筛选出需要修改的行,然后仅针对这些行的
load_weight列执行fillna操作,避免了覆盖整列的问题。 - 不要在这个场景下使用
inplace=True,因为我们需要fillna返回填充后的列值来赋值给目标位置。
内容的提问来源于stack exchange,提问作者Huesca Rashad
相关产品推荐
相关产品推荐

