Python中pandas的map()结合字典替换DataFrame列值的运行原理是什么?
pandas Series.map() 支持字典入参的运行逻辑说明
你印象中需要传入函数和序列的是Python内置的全局map()函数,而你调用的df['Day of Week'].map()是pandas Series对象自带的方法,两者是完全不同的实现,参数规则也不一样。
pandas的Series.map()方法的第一个参数支持三种类型的输入,底层会自动适配不同的处理逻辑:
- 传入函数:将序列中的每个值传入函数执行,用返回值作为映射结果
- 传入字典:将序列中的每个值作为字典的键查询对应值,查询不到时返回
NaN - 传入Series对象:将被调用的Series的值作为索引,匹配传入的Series的索引对应的value作为结果
你场景中传入字典dmap的逻辑其实等价于如下的lambda实现:
df['Day of Week'] = df['Day of Week'].map(lambda x: dmap.get(x, float('nan')))
用字典直接传参是pandas专门为值映射场景设计的语法糖,写法更简洁,执行效率也比自定义lambda函数更高。
需要注意如果你的'Day of Week'列存在超出0-6的数值(比如你提到的7),字典里没有对应的键,映射后会变为NaN,如果需要保留原始值或者指定默认值,可以后续调用fillna()补全,或者提前在字典里定义好所有可能的key的映射。
内容的提问来源于stack exchange,提问作者Aamir Mohiuddin
相关产品推荐
相关产品推荐

