检查熊猫数据框中是不是有多个子字符串[重复]
Posted
技术标签:
【中文标题】检查熊猫数据框中是不是有多个子字符串[重复]【英文标题】:Check if multiple substrings are in pandas dataframe [duplicate]检查熊猫数据框中是否有多个子字符串[重复] 【发布时间】:2018-09-05 14:10:41 【问题描述】:我有一个 pandas 数据框,我想检查某个列的子字符串。 目前我有 30 行这样的代码:
df['NAME'].str.upper().str.contains('LIMITED')) |
(df['NAME'].str.upper().str.contains('INC')) |
(df['NAME'].str.upper().str.contains('CORP'))
它们都与or
条件相关联,如果其中任何一个为真,则该名称是公司名称而不是个人名称。
但对我来说,这似乎不是很优雅。有没有办法检查 pandas 字符串列中的“此列中的字符串是否包含以下列表中的任何子字符串”['LIMITED', 'INC', 'CORP']
。
我找到了 pandas.DataFrame.isin 函数,但这仅适用于整个字符串,不适用于我的子字符串。
【问题讨论】:
注意:有一个解决方案described by @unutbu,比使用pd.Series.str.contains
效率更高。如果性能是一个问题,那么这可能值得调查。
【参考方案1】:
您可以使用正则表达式,其中 '|'是正则表达式中的“或”:
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'
【讨论】:
您能否为“和”条件提出一些建议。我想检查我列表中的所有单词是否存在于数据框的每一行中。 @SyedMdIsmail'&'.join(l)
在问之前我已经试过了。它能够识别“或”条件,但不能识别“与”。感谢您的回复。以上是关于检查熊猫数据框中是不是有多个子字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章