我有一个pandas数据框,我想检查某列的子串。 目前我有30行此类代码:
df['NAME'].str.upper().str.contains('LIMITED')) |
(df['NAME'].str.upper().str.contains('INC')) |
(df['NAME'].str.upper().str.contains('CORP'))
它们都与or
条件相关联,如果其中任何条件为真,则该名称是公司的名称而不是人。
但对我而言,这看起来并不优雅。有没有办法检查&#34的pandas字符串列;此列中的字符串是否包含以下列表中的任何子字符串" ['LIMITED', 'INC', 'CORP']
。
我找到了pandas.DataFrame.isin函数,但这只适用于整个字符串,而不适用于我的子字符串。
答案 0 :(得分:4)
您可以使用正则表达式,其中' |'是"或"在正则表达式中:
l = ['LIMITED','INC','CORP']
regstr = '|'.join(l)
df['NAME'].str.upper().str.contains(regstr)
MVCE:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'NAME':['Baby CORP.','Baby','Baby INC.','Baby LIMITED
...: ']})
In [3]: df
Out[3]:
NAME
0 Baby CORP.
1 Baby
2 Baby INC.
3 Baby LIMITED
In [4]: l = ['LIMITED','INC','CORP']
...: regstr = '|'.join(l)
...: df['NAME'].str.upper().str.contains(regstr)
...:
Out[4]:
0 True
1 False
2 True
3 True
Name: NAME, dtype: bool
In [5]: regstr
Out[5]: 'LIMITED|INC|CORP'