尝试在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
我不希望col3具有“ XYZ,EFG,CDE qw”。我希望能够将“ 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。但是我不确定如何遍历大熊猫数据帧的所有子字符串
答案 0 :(得分:1)
我会去理解列表
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
答案 1 :(得分:0)
您能尝试一下吗?
list1=[1,2,4,5,6,10]
list2=[3,5,86,7,6,20]
list3=['ABC , CDE','CDE','XYZ, CCCDE' , 'cde','XYZ , EFG , CDE qw','CCDE, IJK']
df1=pd.DataFrame({'col1':list1,'col2':list2,'col3':list3})
df1[df1['col3'].str.contains(r'[CDE]$', case=False, regex=True)]
输出:
col1 col2 col3
0 1 3 ABC , CDE
1 2 5 CDE
2 4 86 XYZ, CCCDE
3 5 7 cde