我需要搜索数据框列以查找列表中的字符串,并将匹配项返回到数据框的新列中。下面的代码可以工作,但是效率非常低,我的数据框中有数百万行。
import pandas as pd
Cars = {'MakeModel': ['HondaCivic','Toyota_Corolla','FordFocus','Audi--A4']}
df = pd.DataFrame(data=Cars)
mlist = ['Honda','Toyota','Ford','Audi']
for i in df.index:
for x in mlist:
if x in df.get_value(i,'MakeModel'):
df.set_value(i,'Make', x)
答案 0 :(得分:1)
我们在此处将str.extract
与捕获组一起使用。这将从每个单元格中提取“ make”(如果存在),或在该行中插入NaN。
import re
df['Make'] = df['MakeModel'].str.extract(
r'({})'.format('|'.join(map(re.escape, mlist))), expand=False)
df
MakeModel Make
0 HondaCivic Honda
1 Toyota_Corolla Toyota
2 FordFocus Ford
3 Audi--A4 Audi
如果您确定map(re.escape, mlist)
字符串不包含任何需要转义的正则表达式元字符,则可以用mlist
替换 mlist
。