Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在包含字符串列表的dataframe列中搜索字符串并返回完整的dataframe_Python_Pandas_Dataframe - Fatal编程技术网

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