基于食物类型映射字典填充DataFrame的age列空值
解决方法
核心思路
你需要根据food列的取值,匹配映射字典里的年龄中位数来填充age的空值,replace没法直接实现这种关联映射,用map结合赋值/fillna才是正确的路子。
代码实现
假设你的原DataFrame名为df,年龄中位数映射字典名为food_age_median:
方式一:直接在原DataFrame上填充(高效简洁)
# 用food列匹配字典值,直接填充age的NaN df['age'] = df['age'].fillna(df['food'].map(food_age_median))
方式二:先处理子集再更新原表
如果坚持要先筛选出age为空的子集再操作:
# 筛选age为NaN的子集(加copy避免链式索引警告) na_age_subset = df[df['age'].isna()].copy() # 根据food列映射字典,生成填充后的age值 na_age_subset['age'] = na_age_subset['food'].map(food_age_median) # 将填充好的结果更新回原DataFrame的对应行 df.loc[na_age_subset.index, 'age'] = na_age_subset['age']
为什么replace不行?
replace是对指定值做静态替换,比如把所有NaN换成某个固定值,但你需要的是根据另一列的动态取值来替换,所以它满足不了这种关联映射的需求。
内容的提问来源于stack exchange,提问作者Theramus Gordon
相关产品推荐
相关产品推荐

