嵌套字典值映射到DataFrame不生效,如何正确完成字段值替换?
Pandas嵌套字典替换列值失效的解决方案
失效原因
你遇到的替换不生效问题和不同字段存在相同键无关,核心原因是值类型不匹配:你定义的映射字典里的键是字符串类型(如'1'、'2'),但DataFrame对应列存储的是整数类型的1、2,pandas的replace方法会严格匹配值+类型,两类值判定为不相等,自然无法触发替换。
另外注意不要用dict作为变量名,会覆盖Python内置的dict关键字,容易引发后续不可预知的错误。
正确实现方式
方法1:统一类型后直接用嵌套字典替换
如果要直接用整个嵌套字典执行替换,提前统一列类型和映射键的类型即可,示例代码如下:
# 首先重命名映射字典,不要用dict做变量名 mapping = { 'customer_id': { '1': '47598374539', '2': '859082093'}, 'age': { '1': '55+', '2': '25'}, 'gender': { '1': 'male', '2': 'female'} } # 将需要替换的列统一转成字符串,匹配映射字典的键类型 for col in mapping.keys(): df[col] = df[col].astype(str) # 执行替换即可得到预期结果 df = df.replace(mapping)
方法2:逐列替换(更稳妥,不影响其他列)
如果担心全局替换影响其他无关列的值,可以逐列做映射处理,示例代码如下:
mapping = { 'customer_id': { '1': '47598374539', '2': '859082093'}, 'age': { '1': '55+', '2': '25'}, 'gender': { '1': 'male', '2': 'female'} } for col, col_mapping in mapping.items(): # 转类型后替换,不存在于映射中的值会保留原值 df[col] = df[col].astype(str).replace(col_mapping)
内容的提问来源于stack exchange,提问作者Tara-S1983
相关产品推荐
相关产品推荐

