如何在整个 Pandas 数据框中搜索字符串并获取包含它的列的名称?
How to search entire Pandas dataframe for a string and get the name of the column that contains it?
我想在包含给定字符串的数据框 ("categories") 中查找列的名称。
categories
Groceries Electricity Fastfood Parking
0 SHOP ELCOMPANY MCDONALDS park
1 MARKET ELECT Subway car
2 market electr Restauran 247
假设我想在整个数据框中搜索字符串 "MCDO"。 答案应该是"Fastfood"。我尝试使用 str.contains 但它似乎不适用于数据帧。
我怎样才能做到这一点?谢谢。
您可以通过 contains
和 any
检查
df.apply(lambda x : x.str.contains('MCDO')).any().loc[lambda x : x].index
Index(['Fastfood'], dtype='object')
或使用:
print(df.apply(lambda x: x.str.contains('MCDO')).replace(False,np.nan).dropna(axis=1,how='all').columns.item())
输出:
Fastfood
如果你能搜索整个字符串,那就更容易了,
(df == 'MCDONALDS').any().idxmax()
否则使用应用,
df.apply(lambda x: x.str.startswith('MCDO').any()).idxmax()
也可以为此使用 for
循环:
def strfinder(df, mystr):
for col in df:
for item in df[col]:
if mystr in item:
return col
print(strfinder(df, 'MCDO'))
获取可能包含该字符串的所有列,例如在下面修改后的数据框中:
Groceries Electricity Fastfood Parking
0 SHOP ELCOMPANY MCDONALDS park
1 MARKET MCDON Subway car
2 market electr Restauran 247
可以使用"list comprehension":
mystr = 'MCDO'
outlist = [ col
for col in df
for item in df[col]
if mystr in item ]
print(outlist)
输出:
['Electricity', 'Fastfood']
我想在包含给定字符串的数据框 ("categories") 中查找列的名称。
categories
Groceries Electricity Fastfood Parking
0 SHOP ELCOMPANY MCDONALDS park
1 MARKET ELECT Subway car
2 market electr Restauran 247
假设我想在整个数据框中搜索字符串 "MCDO"。 答案应该是"Fastfood"。我尝试使用 str.contains 但它似乎不适用于数据帧。
我怎样才能做到这一点?谢谢。
您可以通过 contains
和 any
df.apply(lambda x : x.str.contains('MCDO')).any().loc[lambda x : x].index
Index(['Fastfood'], dtype='object')
或使用:
print(df.apply(lambda x: x.str.contains('MCDO')).replace(False,np.nan).dropna(axis=1,how='all').columns.item())
输出:
Fastfood
如果你能搜索整个字符串,那就更容易了,
(df == 'MCDONALDS').any().idxmax()
否则使用应用,
df.apply(lambda x: x.str.startswith('MCDO').any()).idxmax()
也可以为此使用 for
循环:
def strfinder(df, mystr):
for col in df:
for item in df[col]:
if mystr in item:
return col
print(strfinder(df, 'MCDO'))
获取可能包含该字符串的所有列,例如在下面修改后的数据框中:
Groceries Electricity Fastfood Parking
0 SHOP ELCOMPANY MCDONALDS park
1 MARKET MCDON Subway car
2 market electr Restauran 247
可以使用"list comprehension":
mystr = 'MCDO'
outlist = [ col
for col in df
for item in df[col]
if mystr in item ]
print(outlist)
输出:
['Electricity', 'Fastfood']