匹配列表和DF列中的字符串并放入新的DF列

2024-04-26 07:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python,pandas

我有一个数据框,有三列和大约一百万行。第三列包含字符串。我想选择这些字符串中与列表中的字符串匹配的子集,并将它们放在第四列中。你知道吗

以下是数据帧中的字符串示例:

"BW - Jl 8 '79 - pE2 CCB-B -vl9-Ja '66-p83 LJ - v91 - Ja 15 -66 - p426 
NYRB - v5 - D 9 '65 - p39 NYTBR - v70 - N 21 '65 - p60 Nat R - vl7 - 
D14 '65-pll65 y"

以下是我的列表示例:

['AAA', 'A Anth', 'AAPSS-A', 'A Anth', 'A Arch', 'A Art', 'AB', 'ABA 
Jour', 'ABC', 'ABR', 'AC', 'ACSB', 'Adult L', 'Advocate', 'AE', 'AER', 
'AF', 'Africa T', 'Afterimage', 'Aging', 'AH', 'AHR', 'A Hy R', 'AIQ', 
'AJA', 'AJES', 'AJMD', 'AJMR', 'AJP', 'A J Psy', 'AJS', 'AL', 'A Lead', 
'A Lib', 'Am', 'Am Ant', 'Am Arts', 'Am Craft', 'Amer R', 'Am Ethol', 
'Am Film', 'Am Mus Teach', 'Am Q', 'Ams', 'Am Sci', 'Am Spect', 'Am 
Threat', 'Analog', 'ANQ', 'ANQ:QJ', 'Ant & Col Hob', 'Antiq', 'Antiq 
J', 'Ant R', 'Apo', 'APR', 'APSR', 'AR', 'ARBA', 'Arch', 'Archt R', 
'ARG', 'Armchair Det', 'Art Am', 'Art Bull', 'Art Dir', 'Art J', 'Art 
N', 'AS', 'ASBYP', 'Aspen A', 'Aspen J', 'ASR', 'Astron', 'Ath J', 
'Atl', 'Atl Pro Bk R', 'Atl PBR', 'Aud', 'AW', 'BALF', 'Ballet N', 
"Barron's", 'BAS', 'BB', 'B&B', 'BC', 'BCM', 'B Ent', 'Belles Let', 
'BF', 'BFYC', 'B Hor', 'BHR', 'BIC', 'Biography', 'BksW', 'Bks for 
Keeps', 'Bks for YP', 'BL', 'Bloom Rev']

从dataframe中的字符串中,我想选择'BW'、'CCB-B'、'LJ'、'NYRB'、'NYTRB'和'natr'(所有这些都在列表中),并将它们放在同一行的新列中。你知道吗

我的代码如下所示:

s = df65['Review'].str.extractall(reviews_list).squeeze()
s = s.unstack(level=-1)
df65['Reviews'] = s

但extractall并没有以这种方式将列表作为参数。你知道吗

救命啊?你知道吗


Tags: 数据字符串示例列表ambwarchant
1条回答
网友
1楼 · 发布于 2024-04-26 07:23:27

str.extractall需要正则表达式模式作为参数。你可以用

'|'.join(reviews_list)

但是有些字符需要转义才能与regex一起使用,所以导入re并使用re.escape如下:

[re.escape(item) for item in reviews_list]

所以你的新电话是

 s = df65['Review'].str.extractall('|'.join([re.escape(item) for item in reviews_list])).squeeze()

相关问题 更多 >