在字符串列中匹配字典键并填充对应值的Python技术问询
问题描述
我有一个键值对字典,还有一个包含字符串列的Pandas DataFrame,该列的字符串里包含字典的各类键。我想在DataFrame的相邻列中填充对应键的取值。
示例代码:
my_dict = {'elon' : 'is awesome', 'jeff' : 'is not so awesome, but hes ok, ig', 'mustard' : 'is gross', 'pigs' : 'can fly'} import pandas as pd import numpy as np df = pd.DataFrame({ 'Name (Key)' : ['elon musk', 'jeff bezos and elon musk', 'jeff bezos', 'she bought mustard for elon'], 'Corresponding Value(s)' : [np.nan, np.nan, np.nan, np.nan] })
期望输出:
pd.DataFrame({ 'Name (Key)' : ['elon musk', 'jeff bezos and elon musk', 'jeff bezos', 'she bought mustard for elon'], 'Corresponding Value(s)' : [ ['is awesome'], ['is not so awesome, but hes ok, ig', 'is awesome'], ['is not so awesome, but hes ok, ig'], ['is gross', 'is awesome'] ] })
我是Python新手,猜测可能会用到apply函数或者map(),用if语句可行吗?有没有更优的实现方式?
解决方案
方法1:apply遍历每行(新手友好)
逻辑直观,适合新手理解:定义函数处理每行数据,遍历字典的键,判断键是否在当前行字符串中,收集对应值。
def get_matching_values(row): text = row['Name (Key)'] matching_vals = [] for key, value in my_dict.items(): if key in text: matching_vals.append(value) return matching_vals # 对每行应用函数,填充目标列 df['Corresponding Value(s)'] = df.apply(get_matching_values, axis=1)
方法2:列表推导式(更简洁高效)
用列表推导替代apply,减少冗余代码,性能更优(尤其数据量大时):
df['Corresponding Value(s)'] = [ [my_dict[key] for key in my_dict if key in text] for text in df['Name (Key)'] ]
关于你提到的工具说明
if语句完全可行:上面两种方法都用if判断筛选匹配的键,这是核心逻辑。map()不适合这个场景:map是一对一映射工具,只能给每个输入返回单个值,但你的需求是一个字符串可能对应多个值,无法直接满足。
内容的提问来源于stack exchange,提问作者user20234548
相关产品推荐
相关产品推荐

