Python 在包含字符串列表的dataframe列中搜索字符串并返回完整的dataframe
我有一个数据帧Python 在包含字符串列表的dataframe列中搜索字符串并返回完整的dataframe,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧df,它有4列'a','B','C','D' 我必须在每列中搜索一个子字符串,并按搜索顺序返回完整的数据帧,例如,如果我在列B行3,4,5中获得子字符串,那么我的最终df将具有 3行。为此,我使用了df[df['A'].str.contains('string_to _search'),它工作正常,但其中一列将列中的每个元素作为字符串列表组成,如列B A B C D 0 asdfg [
df
,它有4列'a','B','C','D'
我必须在每列中搜索一个子字符串,并按搜索顺序返回完整的数据帧,例如,如果我在列B
行3,4,5
中获得子字符串,那么我的最终df
将具有
3行。为此,我使用了df[df['A'].str.contains('string_to _search')
,它工作正常,但其中一列将列中的每个元素作为字符串列表组成,如列B
A B C D
0 asdfg [asdfgh, cvb] asdfg nbcjsh
1 fghjk [ertyu] fghhjk yrewf
2 xcvb [qwerr, hjklk, bnm] cvbvb gjfsjgf
3 ertyu [qwert] ertyhhu ertkkk
因此df[df['A'].str.contains('string_to _search')
不适用于列B
请建议如何在此列中搜索并保持完整数据框的顺序。列B
中有列表,因此需要在语句中:
df1 = df[df['B'].apply(lambda x: 'cvb' in x)]
print (df1)
A B C D
0 asdfg [asdfgh, cvb] asdfg nbcjsh
如果要使用str.contains
,则可以先使用str.join
,也可以搜索子字符串:
df1 = df[df['B'].str.join(' ').str.contains('er')]
print (df1)
A B C D
1 fghjk [ertyu] fghhjk yrewf
2 xcvb [qwerr, hjklk, bnm] cvbvb gjfsjgf
3 ertyu [qwert] ertyhhu ertkkk
如果要在所有列中搜索:
df2 = (df[df.assign(B = df['B'].str.join(' '))
.apply(' '.join, axis=1)
.str.contains('g')]
)
print (df2)
A B C D
0 asdfg [asdfgh, cvb] asdfg nbcjsh
1 fghjk [ertyu] fghhjk yrewf
2 xcvb [qwerr, hjklk, bnm] cvbvb gjfsjgf
列B
中有列表,因此需要语句中的:
df1 = df[df['B'].apply(lambda x: 'cvb' in x)]
print (df1)
A B C D
0 asdfg [asdfgh, cvb] asdfg nbcjsh
如果要使用str.contains
,则可以先使用str.join
,也可以搜索子字符串:
df1 = df[df['B'].str.join(' ').str.contains('er')]
print (df1)
A B C D
1 fghjk [ertyu] fghhjk yrewf
2 xcvb [qwerr, hjklk, bnm] cvbvb gjfsjgf
3 ertyu [qwert] ertyhhu ertkkk
如果要在所有列中搜索:
df2 = (df[df.assign(B = df['B'].str.join(' '))
.apply(' '.join, axis=1)
.str.contains('g')]
)
print (df2)
A B C D
0 asdfg [asdfgh, cvb] asdfg nbcjsh
1 fghjk [ertyu] fghhjk yrewf
2 xcvb [qwerr, hjklk, bnm] cvbvb gjfsjgf