如何用字典替换Pandas列中指定值并保留其余值?
解决Pandas中DataFrame列部分值替换且保留未匹配值的问题
嗨,这个问题我之前也踩过坑!你用map()的时候遇到的情况是正常的——map()的特性就是:如果传入的字典里没有对应键,它会返回NaN,而na_action参数只是用来处理原数据中本身就存在的NaN的,对没匹配到的键完全不起作用,所以才会把"mel"变成NaN。
给你两个可行的解决方案:
方案1:使用replace()方法(推荐)
这个方法是Pandas专门为这种“仅替换指定值,其余保留”的场景设计的,用法非常简洁,直接传入你的替换字典就行:
# 直接替换指定值,未匹配的保持原样 df['col_1'] = df['col_1'].replace(value2fixed)
运行后你的DataFrame就会变成:
| col_1 | col_2 | |
|---|---|---|
| 0 | dada | 500 |
| 1 | mel | 650 |
| 2 | hoodie | 750 |
方案2:map()结合fillna()(如果你一定要用map的话)
如果因为某些原因必须用map(),可以先执行映射,再用原列的值填充生成的NaN,把未匹配的内容还原回来:
# 先映射,再用原数据填充NaN df['col_1'] = df['col_1'].map(value2fixed).fillna(df['col_1'])
这个方法的逻辑是:先让map()把匹配到的键替换成对应值,没匹配到的变成NaN,然后用原列的原始值把这些NaN填充回去,最终效果和replace()完全一致。
内容的提问来源于stack exchange,提问作者dr jerry
相关产品推荐
相关产品推荐

