在pandas DataFrame中查找字符串值的索引

时间:2017-09-27 16:51:13

标签: python pandas

如何识别我的DataFrame中的哪些列包含特定字符串'foo'

示例DataFrame:

>>> import pandas as pd
>>> df = pd.DataFrame({'A':[10,20,42], 'B':['foo','bar','blah'],'C':[3,4,5], 'D':['some','foo','thing']})

我想在这里找到BD

我可以搜索数字:

如果我正在寻找一个数字(例如42)而不是字符串,我可以像这样生成一个布尔掩码:

>>> ~(df.where(df==42)).isnull().all()

A     True
B    False
C    False
D    False
dtype: bool

但不是字符串:

>>> ~(df.where(df=='foo')).isnull().all()

TypeError: Could not compare ['foo'] with block values

如果可能的话,我不想迭代每一列和每行(我的实际数据比这个例子大得多)。感觉应该有一种简单而有效的方式。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

基础数组数据的一种方法 -

df.columns[(df.values=='foo').any(0)].tolist()

示例运行 -

In [209]: df
Out[209]: 
    A     B  C      D
0  10   foo  3   some
1  20   bar  4    foo
2  42  blah  5  thing

In [210]: df.columns[(df.values=='foo').any(0)].tolist()
Out[210]: ['B', 'D']

如果您正在寻找列掩码 -

In [205]: (df.values=='foo').any(0)
Out[205]: array([False,  True, False,  True], dtype=bool)

答案 1 :(得分:1)

选项1 df.values

~(df.where(df.values=='foo')).isnull().all()

Out[91]: 
A    False
B     True
C    False
D     True
dtype: bool

选项2 isin

~(df.where(df.isin(['foo']))).isnull().all()
Out[94]: 
A    False
B     True
C    False
D     True
dtype: bool

答案 2 :(得分:0)

不幸的是,它不会通过你给出的语法索引str。它必须作为一系列类型字符串运行,以将其与字符串进行比较,除非我遗漏了一些东西。

试试这个

import { TermsOfUsePage } from '../pages/terms-of-use/terms-of-use';
import { PrivacyPolicyPage } from '../pages/privacy-policy/privacy-policy';

// rest of your code