如何用字典替换DataFrame中字符串片段生成新DataFrame?
用字典替换DataFrame字符串列中的指定前缀片段
问题场景
现有如下DataFrame:
import pandas as pd data = {'features': ['2q07_female', '2q06_male'], 'importance': [0.25, 0.30]} df = pd.DataFrame(data)
需要用字典dictnames替换features列中开头的代码片段:
dictnames = {'2q07': 'color of hair', '2q06': 'color of eyes'} # 注:原提问中字典键's2q06'应为'2q06',否则无法匹配第二个数据项
最终生成包含替换后字符串的新DataFrame。
简便实现方法
方法1:拆分拼接法(格式固定时首选)
如果features列的字符串都是[代码]_[后缀]的固定格式,直接拆分后替换再拼接最直观:
# 拆分字符串为代码和后缀两部分,仅拆分一次 df[['code', 'suffix']] = df['features'].str.split('_', n=1, expand=True) # 用字典映射替换代码,再拼接成新的features值 df['features'] = df['code'].map(dictnames) + '_' + df['suffix'] # 移除临时生成的辅助列 df = df.drop(['code', 'suffix'], axis=1)
执行后输出:
features importance 0 color of hair_female 0.25 1 color of eyes_male 0.30
方法2:正则替换法(格式灵活时使用)
如果features的格式不固定,或者前缀位置不确定,可以用正则匹配目标片段进行替换:
import re # 构造正则模式:匹配开头的字典键,后面紧跟下划线 pattern = r'^(' + '|'.join(re.escape(k) for k in dictnames.keys()) + r')_' # 用lambda函数完成匹配替换 df['features'] = df['features'].str.replace(pattern, lambda m: f"{dictnames[m.group(1)]}_", regex=True)
这个方法能适配更复杂的字符串格式,只要前缀是字典中的键即可完成替换。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

