尝试在 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/