I am trying to determine whether there is an entry in a Pandas column that has a particular value. I tried to do this with if x in df['id']. I thought this was working, except when I fed it a value that I knew was not in the column 43 in df['id'] it still returned True. When I subset to a data frame only containing entries matching the missing id df[df['id'] == 43] there are, obviously, no entries in it. How to I determine if a column in a Pandas data frame contains a particular value and why doesn't my current method work? (FYI, I have the same problem when I use the implementation in this answer to a similar question).


当前回答

Use

df[df['id']==x].index.tolist()

如果x存在于id中,那么它将返回它所在位置的索引列表,否则它将给出一个空列表。

其他回答

简单的条件:

if any(str(elem) in ['a','b'] for elem in df['column'].tolist()):

你也可以使用pandas.Series.isin,尽管它比s.values中的'a'长一点:

In [2]: s = pd.Series(list('abc'))

In [3]: s
Out[3]: 
0    a
1    b
2    c
dtype: object

In [3]: s.isin(['a'])
Out[3]: 
0    True
1    False
2    False
dtype: bool

In [4]: s[s.isin(['a'])].empty
Out[4]: False

In [5]: s[s.isin(['z'])].empty
Out[5]: True

但是,如果您需要为一个DataFrame同时匹配多个值,这种方法可以更加灵活。

>>> df = DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7]})
>>> df.isin({'A': [1, 3], 'B': [4, 7, 12]})
       A      B
0   True  False  # Note that B didn't match 1 here.
1  False   True
2   True   True

我有一个CSV文件要读取:

df = pd.read_csv('50_states.csv')

在尝试之后:

if value in df.column:
    print(True)

即使值在列中,它也不会输出true;

我试着:

for values in df.column:
    if value == values:
        print(True)
        #Or do something
    else:
        print(False)

这工作。希望这能有所帮助!

使用query()查找符合条件的行,并获得形状为[0]的行数。如果存在至少一个条目,则此语句为True:

df.query('id == 123').shape[0] > 0

Use

df[df['id']==x].index.tolist()

如果x存在于id中,那么它将返回它所在位置的索引列表,否则它将给出一个空列表。