检查熊猫数据框中是不是有多个子字符串[重复]

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) 在问之前我已经试过了。它能够识别“或”条件,但不能识别“与”。感谢您的回复。

以上是关于检查熊猫数据框中是不是有多个子字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式删除熊猫数据框中的子字符串

熊猫数据框列上的子字符串

检查字符串是不是在熊猫数据框中

检查字符串是不是包含多个子字符串之一

如何有条件地将子字符串复制到熊猫数据框的新列中?

如何在熊猫数据框+ python的一列中的<>之间找到多个子字符串