python - 检查字符串中是否存在特定子字符串(存在于数据帧的行中)

标签 python regex python-3.x pandas dataframe

尝试在 pandas 数据帧的列中查找子字符串。

下面是我的代码

    import pandas as pd

    list1=[1,2,4,5,6,10]

    list2=[3,5,86,7,6,20]

    list3=['ABC , CDE','CDE','XYZ' , 'cde','XYZ , EFG , CDE qw','IJK']

    df1=pd.DataFrame({'col1':list1,'col2':list2,'col3':list3})

    D=df1[df1.col3.str.contains('CDE', case=False)]

    print('\n \n \n ',D)

    print('\n \n \n ',df1)

原始数据框:

col1    col2    col3
1   3   ABC , CDE
2   5   CDE
4   86  XYZ
5   7   cde
6   6   XYZ , EFG , CDE qw
10  20  IJK

输出数据帧:

col1    col2    col3
1   3   ABC , CDE
2   5   CDE
5   7   cde
6   6   XYZ , EFG , CDE qw

我需要什么:

col1    col2    col3
1   3   ABC , CDE
2   5   CDE
5   7   cde

我不想要包含“XYZ、EFG、CDE qw”的 col3。我希望能够区分“CDE qw”和“CDE”。

简单来说,我想迭代 col3 中的字符串并找到确切的字符串。

当我使用 D=df1[df1.col3.str.match('CDE', case=False)] 而不是 D=df1[df1.col3.str.contains ('CDE', case=False)]

输出将是

2   5   CDE
5   7   cde

但我想要其他具有 CDE 的行。

我相信我应该使用正则表达式和 split 来处理 pandas。但我不确定如何迭代 pandas 数据帧的所有子字符串

最佳答案

我会选择列表理解

mask = [any([sub.lower() == 'cde' for sub in item.split(' , ')]) for item in df1.col3]
df1[mask]
<小时/>

您还可以使用

df1[(pd.DataFrame(df1['col3'].str.lower().str.split(' , ').tolist()) == 'cde').any(1)]

    col1    col2    col3
0   1       3       ABC , CDE
1   2       5       CDE
3   5       7       cde

关于python - 检查字符串中是否存在特定子字符串(存在于数据帧的行中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57246577/

相关文章:

python - 将附近的边界框合并为一个

python-3.x - 如何在单词 'the' 之后找到最常用的名词?

python - 将单词列表与职位描述列表匹配的最佳方法 python

python - 使用来自谷歌驱动器的数据在 colab 中使用 fastai 创建数据束

python - 如何在python3中进行离线地理编码?

css - 正则表达式从图像中删除主机名

python - 从文本中提取数字+空格/连字符和字母数字值

javascript - 如何克服JavaScript代码中缺少Perl的\G?

mysql regex_replace : how to use regex group in replacement

python - 如何在Python中生成按时间排序的uid?