#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
В фрейме данных pandas у меня есть поле ‘amp’, которое должно быть заполнено списком длиной 495. Есть ли способ panda-ic для быстрой фильтрации по этой длине, чтобы все строки с полем ‘amp’ не были равны 495, отбрасывались?
Я пытался
df[len(df['amp']) == 495]
и это вернуло
KeyError: False
Комментарии:
1. Пожалуйста, не редактируйте код внутри ответа, поскольку это может противоречить намерениям автора, и вместо этого прокомментируйте ответ, чтобы запросить разъяснения или исправления, если это необходимо.
Ответ №1:
Если вам конкретно нужно len
, то ответ @MaxU является лучшим.
Для более общего решения вы можете использовать метод сопоставления ряда.
df[df['amp'].map(len) == 495]
Это будет применяться len
к каждому элементу, который вам нужен. С помощью этого метода вы можете использовать любую произвольную функцию, а не только len
.
Комментарии:
1. можете ли вы переключить != на ==, цель — сохранить только массивы 495. thx
Ответ №2:
Попробуйте это:
df[df['amp'].str.len() == 495]
ДЕМОНСТРАЦИЯ:
In [77]: df
Out[77]:
a
0 [1, 2, 3, 4, 5]
1 [1, 2, 3]
2 [-1]
In [78]: df.a.str.len()
Out[78]:
0 5
1 3
2 1
Name: a, dtype: int64
In [79]: df[df.a.str.len() == 3]
Out[79]:
a
1 [1, 2, 3]
Комментарии:
1. Работает ли это, даже если элемент a
list
, а не astr
?2. Аккуратно. Вероятно, им следует обновить свою документацию, чтобы указать, что она может работать для любого типа, который поддерживает
len
. Из API : «Вычислить длину каждой строки в ряду / индексе»..3. @SethMMorton, пожалуйста, не стесняйтесь создавать «Запрос на извлечение» на GitHub (просто пометьте его как «DOC: …») — это было бы действительно полезно 🙂
4. Вау, это здорово, спасибо! ответ @SethMMorton немного более общий (и научил меня использовать map), поэтому я выбрал это, но большое спасибо за это!
5. @MaxU можете ли вы переключить
!=
на==
, цель — сохранить только массивы из 495