python - Python数据框匹配列表中的字符串
问题描述
我需要在数据框列中搜索列表中的匹配字符串,并将匹配项返回到数据框中的新列中。下面的代码有效,但效率极低,我的数据框中有数百万行。
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
字符串不包含任何需要转义的正则表达式元字符,则可以替换为。
推荐阅读
- php - CURL POST 后重定向到另一个页面
- c++ - 设置整数中的较高位,而不管其中的位数
- spring - 依赖项spring boot jar文件的方面不起作用
- c# - 为 WebApi 处理 404 Not Found
- r - 在R中的apply函数中使用if else语句
- pinterest - 有没有办法在调用 `pintrk('load')` 后设置电子邮件哈希?
- php - 如何找到2次之间的差异?
- android - 如何处理 JSON OBJECT,其中不知道对象的编号及其键名
- c++ - 有没有一种明智的方法可以从位集中提取最低有效数字?
- android - 在 onMessageReceived 中获取推送通知数据但不显示推送通知