根据条件返回列名

时间:2018-02-14 10:02:55

标签: python python-3.x pandas

我有一个包含100多列的DS,并且只需要返回包含此字符串'palm oil'的行的列名。我已经看到了这个问题的一些变化,并尝试了所有可能的组合,但是不能帮助我返回包含感兴趣字符串的行的列名。有人可以帮忙吗?这是我的代码 -

str_cols = []
for col in df.select_dtypes([np.object]).columns[7:45]:
    if df[col].str.lower().str.contains("palm", na=False):
    str_cols.append(col)
print (str_cols)

1 个答案:

答案 0 :(得分:2)

如果希望返回列名称按str.containscase=False过滤列,则不区分大小写:

df = pd.DataFrame({'A':list('abcdef'),
                   'B':['palm oil',5,4,5,'palm oil 5',4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,'Palm oil',1,0],
                   'E':[5,3,6,9,2,'palm OIL'],
                   'F':list('aaabbb')}).astype(str)

print (df)
   A           B  C         D         E  F
0  a    palm oil  7         1         5  a
1  b           5  8         3         3  a
2  c           4  9         5         6  a
3  d           5  4  Palm oil         9  b
4  e  palm oil 5  2         1         2  b
5  f           4  3         0  palm OIL  b

m = df.astype(str).apply(lambda x: x.str.contains("palm oil", case=False, na=False)).any()

c = df.columns[m]
print (c)
Index(['B', 'D', 'E'], dtype='object')