如何利用嵌套字典替换Pandas DataFrame中的值
解决DataFrame列与嵌套字典匹配并映射的问题
我来帮你搞定这个需求!咱们先从示例数据入手,这样能更清晰地展示操作逻辑~
示例数据准备
首先定义一个示例DataFrame和对应的嵌套映射字典:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'fruit': ['apple', 'banana', 'orange'], 'color': ['red', 'yellow', 'orange'], 'taste': ['sweet', 'sweet', 'sour'] # 这个列不在映射字典里,用来测试兼容情况 }) # 嵌套映射字典:外层键对应DataFrame的列名,内层键值对是要映射的规则 mapping_dict = { 'fruit': { 'apple': '甜脆苹果', 'banana': '软糯香蕉', 'orange': '酸甜橙子' }, 'color': { 'red': '正红色', 'yellow': '明黄色', 'orange': '橙橘色' } }
核心实现方法
我们需要让DataFrame的列名和字典的外层键匹配,匹配成功后用内层的键值对替换列中的行数据。最简洁高效的方式是用pandas的apply结合map方法:
# 遍历每一列,根据列名匹配嵌套字典的外层键,完成映射 result_df = df.apply(lambda col: col.map(mapping_dict.get(col.name, {})).fillna(col)) print(result_df)
运行后得到的结果:
| fruit | color | taste |
|---|---|---|
| 甜脆苹果 | 正红色 | sweet |
| 软糯香蕉 | 明黄色 | sweet |
| 酸甜橙子 | 橙橘色 | sour |
代码解释
col.name:获取当前处理的列名,用来匹配嵌套字典的外层键mapping_dict.get(col.name, {}):如果列名存在于字典外层键中,就取出对应的内层映射字典;如果不存在,返回空字典(避免报错).fillna(col):如果列中的某个值不在内层字典的键里,就保留原数值(防止变成NaN)
进阶优化:只处理匹配的列
如果你的DataFrame有很多列,只想处理和字典外层键匹配的列,可以先筛选出目标列再操作,这样更高效:
# 筛选出与字典外层键匹配的列 target_cols = [col for col in df.columns if col in mapping_dict] # 仅对这些列执行映射 df[target_cols] = df[target_cols].apply(lambda col: col.map(mapping_dict[col.name]))
这样就完成了精准的列匹配与数据映射啦~
内容的提问来源于stack exchange,提问作者spr_m
相关产品推荐
相关产品推荐

