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