基于Pandas实现CSV/Excel中字典键匹配并生成对应值列
最Pythonic的Pandas处理方案来啦!
嘿,这个需求用Pandas处理简直是量身定做,给你两个实用又符合Python风格的方法,按需选就行:
方法一:矢量化正则匹配(高效首选)
如果你的数据集比较大,这种矢量化操作比逐行处理快N倍,完全是Pandas的正确打开方式:
import pandas as pd import re # 你的映射字典 my_dict = {'Awesome': 'Sauce', 'Foo': 'Barr'} # 读取CSV/Excel文件(替换成你的文件路径) df = pd.read_csv('your_data.csv') # df = pd.read_excel('your_data.xlsx') # 构建匹配字典键的正则表达式,支持不区分大小写 pattern = '|'.join(re.escape(key) for key in my_dict.keys()) # 提取Col B中匹配的第一个键 df['Col C'] = df['Col B'].str.extract(f'({pattern})', flags=re.IGNORECASE) # 统一大小写后映射到字典值(解决原数据中键大小写不一致的问题) df['Col C'] = df['Col C'].str.capitalize().map(my_dict)
运行后你就能看到Col C里完美对应上了Sauce和Barr,而且大数据量下性能拉满!
方法二:自定义函数+apply(灵活易读)
如果需要更灵活的匹配逻辑(比如优先匹配某个键、处理多键匹配的情况),用apply配合自定义函数会更直观:
import pandas as pd my_dict = {'Awesome': 'Sauce', 'Foo': 'Barr'} df = pd.read_csv('your_data.csv') def get_match_value(text, mapping): # 遍历字典,检查文本中是否包含键(不区分大小写) for key, value in mapping.items(): if key.lower() in text.lower(): return value return None # 无匹配时返回None,也可以改成你需要的默认值 # 逐行应用函数生成Col C df['Col C'] = df['Col B'].apply(lambda x: get_match_value(x, my_dict))
这个方法逻辑清晰,新手也能一眼看懂,适合需要定制匹配规则的场景。
小提示
- 如果你的字典键都是严格大小写匹配的,把
flags=re.IGNORECASE和str.capitalize()去掉就行 - 如果一行里有多个匹配的键,两种方法都会返回第一个匹配到的结果,你可以根据需求调整遍历顺序或正则的优先级
内容的提问来源于stack exchange,提问作者Umar.H
相关产品推荐
相关产品推荐

