我需要在数据框列中搜索匹配列表中的字符串,然后将匹配项返回到数据框中的新列中。下面的代码可以工作,但是效率非常低,我的数据框中有数百万行。

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)

最佳答案

让我们在此处将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

关于python - 列表中的Python数据框匹配字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56905048/

10-16 05:17