我想知道是否有人可以帮助我将字符串列与python中的宽松字典匹配。所以我有以下python数据框:
String Colour
8392apple8309
8dbsfhorange9anld
38banananflks9
和这本字典:
_dict
{'apple':'Red',
'orange':'Orange'
'banana':'Yellow'}
我已经编写了此功能:
def fruitsearch(string):
return [value for key, value in _dict.items() if string in key.lower()]
可以接受我的键的子字符串,例如fruitsearch('app')并返回正确的颜色,红色。但是,我想做的就是让该函数在我的数据框“字符串”列中找到键,然后将正确的颜色返回到数据框的第二列,即颜色,所以它看起来像这样:
String Colour
8392apple8309 Red
8dbsfhorange9anld Orange
38banananflks9 Yellow
谢谢!
答案 0 :(得分:6)
这是一种方法。
演示:
import pandas as pd
def fruitsearch(string):
_dict = {'apple':'Red', 'orange':'Orange', 'banana':'Yellow'}
for key, value in _dict.items():
if key.lower() in string:
return value
return None
df = pd.DataFrame({"String": ["8392apple8309", "8dbsfhorange9anld", "38banananflks9"]})
df["Colour"] = df["String"].apply(fruitsearch)
print(df)
输出:
String Colour
0 8392apple8309 Red
1 8dbsfhorange9anld Orange
2 38banananflks9 Yellow
答案 1 :(得分:1)
当前,您正在按行计算迭代字典。为了提高效率(尤其是在行数很大的情况下),请为每个字典项考虑 column-wise 操作。在这种情况下,您可以使用pd.Series.str.contains
并提供参数regex=False
来提高性能。
for k, v in _dict.items():
df.loc[df['String'].str.contains(k, regex=False), 'Colour'] = v
print(df)
String Colour
0 8392apple8309 Red
1 8dbsfhorange9anld Orange
2 38banananflks9 Yellow