使用Pandas map函数时如何保留未指定映射的索引对应值
Pandas中map函数替换值时保留未匹配项的方法
当用map()传入字典对列值做替换时,字典中没有的键对应的元素会被自动转为NaN,这就是你看到其他名字变成空值的原因。要保留未指定映射的原有值,有两种简单方法:
方法一:使用replace()函数(推荐)
replace()是Pandas专门用于值替换的函数,默认会保留未匹配的原数值,不需要额外处理:
import pandas as pd # 构造原始DataFrame data = { 'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily'], 'score': [12.5, 9.0, 16.5, pd.NA, 9.0], 'attempts': [1, 3, 2, 3, 2], 'qualify': ['yes', 'no', 'yes', 'no', 'no'] } dff = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e']) # 定义映射规则 codes = {'James':'99','Emily':'99'} # 使用replace替换 dff['name'] = dff['name'].replace(codes) print(dff)
执行后结果:
name score attempts qualify a Anastasia 12.5 1 yes b Dima 9.0 3 no c Katherine 16.5 2 yes d 99 NaN 3 no e 99 9.0 2 no
方法二:map()结合fillna()
如果一定要用map(),可以先完成指定值的映射,再用原列的值填充生成的NaN:
codes = {'James':'99','Emily':'99'} dff['name'] = dff['name'].map(codes).fillna(dff['name'])
这个方法先通过map()替换目标值,再用fillna()把未匹配的空值补回原来的名字,最终效果和replace()一致。
内容的提问来源于stack exchange,提问作者Err0rBlade
相关产品推荐
相关产品推荐

