如何确定pandas列是否包含特定的值

我试图确定是否有一个具有特定价值的pandas列中的条目。 我试图用if x in df['id']来做到这一点。 我认为这是有效的,除非当我给它一个值,我知道不是43 in df['id']43 in df['id']43 in df['id']它仍然返回True 。 当我子集到一个数据框只包含匹配缺less的id df[df['id'] == 43]条目时,显然没有条目。 如何确定pandas数据框中的列是否包含特定值,为什么我的当前方法不起作用? (仅供参考,当我在类似的问题中使用这个答案时,我遇到了同样的问题)。

in Series中检查值是否在索引中:

 In [11]: s = pd.Series(list('abc')) In [12]: s Out[12]: 0 a 1 b 2 c dtype: object In [13]: 1 in s Out[13]: True In [14]: 'a' in s Out[14]: False 

一种select是看它是否在独特的价值:

 In [21]: s.unique() Out[21]: array(['a', 'b', 'c'], dtype=object) In [22]: 'a' in s.unique() Out[22]: True 

或者Python集合:

 In [23]: set(s) Out[23]: {'a', 'b', 'c'} In [24]: 'a' in set(s) Out[24]: True 

正如@DSM指出的那样,它可能更有效率(特别是如果你只是为了一个值而做这个)直接使用这些值:

 In [31]: s.values Out[31]: array(['a', 'b', 'c'], dtype=object) In [32]: 'a' in s.values Out[32]: True 

您也可以使用pandas.Series.isin,虽然它比'a' in s.values

 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同时匹配多个值,则此方法可以更灵活(请参阅DataFrame.isin )

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