/
Вопросы и ответы
/
Аналитика данных
/

Pandas как удалить по условию

Pandas как удалить по условию

4 года назад

Arthur Cheremisin

Ответы

0

Для удаления строк по определенному условию в pandas можно использовать метод drop с параметром axis=0, который удаляет строки, и передать в качестве условия булеву маску или индекс, указывающий строки, которые нужно удалить.

Например, если у нас есть DataFrame df и мы хотим удалить строки, где значение столбца column_name равно определенному значению value, то мы можем сделать это следующим образом:

1
df = df.drop(df[df['column_name'] == value].index)

Это удалит все строки, где значение столбца column_name равно value.

Если нужно удалить строки, которые удовлетворяют нескольким условиям, то можно использовать логические операции & (и) и | (или) для комбинирования условий. Например, чтобы удалить строки, где значение столбца column1 равно value1 и значение столбца column2 равно value2, можно написать так:

1
df = df.drop(df[(df['column1'] == value1) & (df['column2'] == value2)].index)

2 года назад

Elena Gromova

0

Строки по условию в pandas удаляют фильтрацией: оставляют те, что условию не соответствуют. Знак ~ инвертирует условие:

1
2
3
4
5
6
7
8
9
import pandas as pd

df = pd.DataFrame({"name": ["Анна", "Олег", "Мария"], "age": [25, 17, 32]})

df = df[~(df["age"] < 18)]  # удалить несовершеннолетних
print(df)
#     name  age
# 0   Анна   25
# 2  Мария   32

То же самое без ~ — сразу записать условие для строк, которые остаются: df[df["age"] >= 18].

Несколько условий

Условия объединяют через & (и) и | (или), каждое — в скобках:

1
2
3
df = pd.DataFrame({"city": ["Москва", "Казань", "Москва"], "sales": [100, 0, 0]})
df = df[~((df["city"] == "Москва") & (df["sales"] == 0))]
print(df["city"].tolist())  # => ['Москва', 'Казань']

Обычные and и or с таблицами не работают — будет ValueError: The truth value of a Series is ambiguous.

Через drop()

1
2
3
df = pd.DataFrame({"age": [25, 17, 32]})
df = df.drop(df[df["age"] < 18].index)
print(df["age"].tolist())  # => [25, 32]

Удалить по списку значений

1
2
3
df = pd.DataFrame({"city": ["Москва", "Казань", "Сочи"]})
df = df[~df["city"].isin(["Казань", "Сочи"])]
print(df["city"].tolist())  # => ['Москва']

Удалить строки с пропусками

1
2
3
df = pd.DataFrame({"a": [1, None, 3], "b": [4, 5, None]})
print(df.dropna().shape[0])              # => 1 — только строки без пропусков
print(df.dropna(subset=["a"]).shape[0])  # => 2 — пропуски только в столбце a

Через query()

1
2
df = pd.DataFrame({"age": [25, 17, 32]})
print(df.query("age >= 18")["age"].tolist())  # => [25, 32]

После удаления индексы остаются прежними, с пропусками. Пронумеровать заново: df = df.reset_index(drop=True).

Работу с таблицами в pandas разбирают в курсе «Python для анализа данных».

18 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845