Pandas如何通过映射仅修改列指定值,保留NaN对应的原有值?
解决方案
你可以通过以下两种常用方法实现需求,两种方法均会保留chunkiness为NaN时原chicken列的取值:
方法1:使用fillna补全(最简洁)
map方法对NaN值会返回NaN,你只需要在赋值前用原有chicken列的内容填充这些NaN即可:
mapping_dict = {0.0: "small", 1.0: "meh", 2.0: "big", 3.0: "chunky!"} im_df["chicken"] = im_df.chunkiness.map(mapping_dict).fillna(im_df["chicken"])
方法2:使用loc筛选仅修改符合条件的行
如果你希望更明确地只处理chunkiness非空的行,避免对其他行做任何改动,可以先做布尔筛选再赋值:
mapping_dict = {0.0: "small", 1.0: "meh", 2.0: "big", 3.0: "chunky!"} # 筛选chunkiness非空的行 not_null_mask = im_df["chunkiness"].notna() im_df.loc[not_null_mask, "chicken"] = im_df.loc[not_null_mask, "chunkiness"].map(mapping_dict)
注意:如果
chunkiness列存在非NaN但不在mapping_dict键中的值,两种方法都会保留对应行原有的chicken值,如果这不符合你的预期,可以额外加逻辑对无效值做校验处理。
内容的提问来源于stack exchange,提问作者caasswa
相关产品推荐
相关产品推荐

