包含字符串的pandas列名的布尔查询?

时间:2014-09-04 20:42:24

标签: python pandas

我有一个pandas数据帧:

import pandas as pd

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'reports_1': [3, 42, 25, 25, 25], 
        'reports_2': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data)
df

我想做一个布尔查询来询问列名是否包含字符串(即部分匹配):

伪代码示例:

For c in df.columns:
    if df.columns[c] contains 'reports':
        print('yay')
    else:
        print('boo')

我想要的伪代码输出:

Boo
Yay
Yay

2 个答案:

答案 0 :(得分:3)

我们可以遍历列,只测试字符串是否在列字符串中:

In [14]:

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'reports_1': [3, 42, 25, 25, 25], 
        'reports_2': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data)
for col in df:
    if 'reports' in col:
        print('yay')
    else:
        print('boo')
boo
yay
yay

另一种方法是从列创建一个系列并使用矢量化str方法contains

In [33]:

pd.Series(df.columns).str.contains('reports').apply( lambda x: 'yay' if x == True else 'boo')
Out[33]:
0    boo
1    yay
2    yay
dtype: object

答案 1 :(得分:2)

df.columns.map(lambda x: "reports" in x and 'yay' or 'boo')