Как определить, содержит ли столбец Pandas определенное значение



Я пытаюсь определить, есть ли запись в столбце панды, которая имеет определенное значение. Я пытался сделать это с помощью if x in df['id']. Я думал, что это работает, за исключением тех случаев, когда я кормил его значение, которое я знал, не было в столбце 43 in df['id'] он все-таки вернулся True. Когда я подмножество в фрейм данных, содержащий только записи, соответствующие отсутствующему идентификатору df[df['id'] == 43] в нем, очевидно, нет записей. Как определить, содержит ли столбец в фрейме данных Pandas определенное значение и почему этого не происходит мой текущий метод работы? (К вашему сведению, у меня такая же проблема, когда я использую реализацию в этом ответе на аналогичный вопрос).

2555   2  

2 ответов:

in из серии проверяет, находится ли значение в индексе:

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

один из вариантов, чтобы увидеть, если это в уникальный значения:

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

вы также можете использовать панды.Серии.Исин хотя это немного больше, чем '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

но этот подход может быть более гибким, если вам нужно сопоставить несколько значений сразу для фрейма данных (см. таблицы данных.Исин)

>>> 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

Comments

    Ничего не найдено.