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

时间:2017-10-18 16:01:10

标签: python list pandas dataframe

使用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']

从数据框中的字符串中,我想选择' BW',' CCB-B',' LJ'' NYRB&#39 ;,' NYTRB'和' Nat R',(所有这些都在列表中)并将它们放在同一行的新列中。

我的代码如下所示:

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

但是,并不是以这种方式将列表作为参数。

帮助?

1 个答案:

答案 0 :(得分:1)

str.extractall期望将正则表达式模式作为参数。您可以使用

制作此正则表达式
'|'.join(reviews_list)

但有些字符需要转义才能与正则表达式一起使用,因此请导入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()