Python 在任何列中搜索dataframe关键字并获取行

Python 在任何列中搜索dataframe关键字并获取行,python,search,pandas,dataframe,contains,Python,Search,Pandas,Dataframe,Contains,我有一个数据帧,我希望通过逐个检查所有行中所有列中是否存在关键字来获得子集。 以下是片段: df.apply(lambda x: x.str.contains('TEST')).any() 但由于并非所有列值都是字符串类型,因此会引发错误: AttributeError:('只能使用带字符串值的.str访问器 非常感谢您的帮助。这里没有示例,但如何: df.apply(lambda行:row.astype(str).str.contains('TEST').any(),axis=1) 例如:

我有一个数据帧,我希望通过逐个检查所有行中所有列中是否存在关键字来获得子集。 以下是片段:

df.apply(lambda x: x.str.contains('TEST')).any()
但由于并非所有列值都是字符串类型,因此会引发错误:

AttributeError:('只能使用带字符串值的.str访问器


非常感谢您的帮助。

这里没有示例,但如何:

df.apply(lambda行:row.astype(str).str.contains('TEST').any(),axis=1)

例如:

import numpy as np
import pandas as pd

np.random.seed(0)
df = pd.DataFrame(np.random.choice(['0.0', 'Hello', 'Goodbye'], (12, 3)))
df.apply(lambda row: row.astype(str).str.contains('Hello').any(), axis=1)

没有数据,这很复杂,但我尝试使用numpy函数和列表理解:

print df
       A      B          D   E
0      A  TEST1 2014-04-08   8
1      B  TEST2 2014-05-08   7
2      B      C 2014-05-08  15
3      B  TEST3 2014-05-08   1
4  TESTA      A 2014-04-08   6
5      A  TEST5 2014-04-08   1
使用包含字符串数据的列屏蔽子集

 mask = np.column_stack([df[col].str.contains("TEST") for col in ['A', 'B']])
 print mask
 [[False  True]
 [False  True]
 [False False]
 [False  True]
 [ True False]
 [False  True]]
print df.loc[mask.any(axis=1)]
       A      B          D  E
0      A  TEST1 2014-04-08  8
1      B  TEST2 2014-05-08  7
3      B  TEST3 2014-05-08  1
4  TESTA      A 2014-04-08  6
5      A  TEST5 2014-04-08  1
mask = np.column_stack([df[col].str.contains("TEST") for col in df if col not in ['D', 'E']])
print mask
[[False  True]
 [False  True]
 [False False]
 [False  True]
 [ True False]
 [False  True]]
print df.loc[mask.any(axis=1)]
       A      B          D  E
0      A  TEST1 2014-04-08  8
1      B  TEST2 2014-05-08  7
3      B  TEST3 2014-05-08  1
4  TESTA      A 2014-04-08  6
5      A  TEST5 2014-04-08  1
屏蔽包含非字符串数据的排除列的子集

 mask = np.column_stack([df[col].str.contains("TEST") for col in ['A', 'B']])
 print mask
 [[False  True]
 [False  True]
 [False False]
 [False  True]
 [ True False]
 [False  True]]
print df.loc[mask.any(axis=1)]
       A      B          D  E
0      A  TEST1 2014-04-08  8
1      B  TEST2 2014-05-08  7
3      B  TEST3 2014-05-08  1
4  TESTA      A 2014-04-08  6
5      A  TEST5 2014-04-08  1
mask = np.column_stack([df[col].str.contains("TEST") for col in df if col not in ['D', 'E']])
print mask
[[False  True]
 [False  True]
 [False False]
 [False  True]
 [ True False]
 [False  True]]
print df.loc[mask.any(axis=1)]
       A      B          D  E
0      A  TEST1 2014-04-08  8
1      B  TEST2 2014-05-08  7
3      B  TEST3 2014-05-08  1
4  TESTA      A 2014-04-08  6
5      A  TEST5 2014-04-08  1
你能补充一下吗?