如何用字典映射Pandas列值,无匹配项设为None?
解决DataFrame列值映射且未匹配项设为None的问题
方法1:使用Series.map()(最简洁高效)
map()方法天生适配这种需求——仅映射字典中存在的键,未匹配项自动返回NaN;如果需要严格的None,可通过where()进一步转换:
# 直接映射,未匹配项为NaN df['col1'] = df['col1'].map(cat_dic) # 若需将未匹配项明确设为None df['col1'] = df['col1'].map(cat_dic).where(df['col1'].isin(cat_dic.keys()), None)
方法2:结合replace()与mask()
先完成字典映射,再将原列中不在字典键集合里的值替换为None:
df['col1'] = df['col1'].replace(cat_dic).mask(~df['col1'].isin(cat_dic.keys()), None)
方法3:自定义apply()函数
适合需要更复杂逻辑的场景,利用字典的get()方法指定未匹配时返回None:
def map_category(x): return cat_dic.get(x, None) df['col1'] = df['col1'].apply(map_category)
内容的提问来源于stack exchange,提问作者M.Tailleur
相关产品推荐
相关产品推荐

