Я пытаюсь определить, есть ли запись в столбце Панд, которая имеет определенное значение. Я пытался сделать это с if x in df['id']
. Я думал, что это работает, за исключением случаев, когда я дал ему значение, которое, как я знал, не было в столбце, которое 43 in df['id']
он все еще возвращал True
. Когда я df[df['id'] == 43]
размещаю подкадр только для фрейма данных, содержащего записи, соответствующие отсутствующему идентификатору, в нем, очевидно, нет записей. Как определить, содержит ли столбец во фрейме данных Pandas определенное значение, и почему мой текущий метод не работает? (К вашему сведению, у меня та же проблема, когда я использую реализацию в этом ответе на аналогичный вопрос).
157
'a' in s.values
должно быть быстрее для длинных серий.'a' in s
pandas предпочитает проверять индекс, а не значения ряда? В словарях они проверяют ключи, но ряды панд должны вести себя больше как список или массив, не так ли?s.values
иdf.values
очень обескуражен. Смотрите это . Кроме того,s.values
на самом деле намного медленнее в некоторых случаях..to_numpy
или.array
доступны на серии, так что я не совсем уверен , что альтернативы они выступают (я не читал «крайне нежелательно»). На самом деле они говорят , что .values не может возвращать Numpy массив, например , в случае категорического ... но это нормально , какin
все равно будет работать , как и ожидалось ( на самом деле более эффективно , что это NumPy коллега массив)Вы также можете использовать pandas.Series.isin, хотя это немного дольше, чем
'a' in s.values
:Но этот подход может быть более гибким, если вам нужно сопоставить несколько значений одновременно для DataFrame (см. DataFrame.isin )
источник
s.isin(['a']).any()
found.count()
воли содержит количество совпаденийИ если это 0, то означает, что строка не была найдена в столбце.
источник
na=False
иregex=False
для моего вариантаЯ сделал несколько простых тестов:
Интересно, что не имеет значения, если вы посмотрите 9 или 999999, кажется, что использование синтаксиса in занимает примерно столько же времени (должно быть, используется бинарный поиск)
Похоже, использование x.values является самым быстрым, но, возможно, в пандах есть более элегантный способ?
источник
Или используйте
Series.tolist
илиSeries.any
:Series.tolist
делает список о aSeries
, а другой я просто получаю логическое значениеSeries
от обычногоSeries
, затем проверяю, есть ли какие-либоTrue
s в логическом значенииSeries
.источник
Простое условие:
источник
использование
Если
x
присутствует в,id
он вернет список индексов, где он присутствует, иначе он даст пустой список.источник
Я не предлагаю использовать «значение в серии», которое может привести ко многим ошибкам. Пожалуйста, смотрите этот ответ для деталей: Использование в операторе с сериями Pandas
источник
Предположим, ваш датафрейм выглядит так:
Теперь вы хотите проверить, присутствует ли имя файла «80900026941984» в кадре данных или нет.
Вы можете просто написать:
источник