繁体   English   中英

如何在整个Pandas数据帧中搜索字符串,并获取包含该字符串的列的名称?

[英]How to search entire Pandas dataframe for a string and get the name of the column that contains it?

我想在包含给定字符串的数据帧(“类别”)中找到列的名称

categories

    Groceries   Electricity Fastfood    Parking 
0   SHOP        ELCOMPANY   MCDONALDS   park
1   MARKET      ELECT       Subway      car
2   market      electr      Restauran   247 

假设我要在整个数据框中搜索字符串“ MCDO”。 答案应该是“快餐” 我尝试使用str.contains,但它似乎不适用于数据帧。

我该如何实现? 谢谢。

您可以使用any contains

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使用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 

可以使用“列表理解”:

mystr = 'MCDO'
outlist = [ col 
            for col in df 
            for item in df[col]
            if mystr in item    ]
print(outlist)

输出:

['Electricity', 'Fastfood']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM