Data Science

Эффективное удаление строк в Pandas DataFrame

Spread the love

Pandas — это мощная библиотека Python для обработки данных. Распространённая задача — удаление строк из DataFrame на основе значений столбцов. В этой статье рассматриваются эффективные методы для этого.

Содержание

Эффективное удаление строк с помощью булевых масок

Булевы маски обеспечивают наиболее краткий и эффективный способ удаления строк на основе значений столбца. Они напрямую фильтруют DataFrame с помощью булевого условия.


import pandas as pd

# Пример DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 25, 35],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
print("Исходный DataFrame:n", df)

# Удаление строк, где Age равно 25
df = df[df['Age'] != 25]  
print("nDataFrame после удаления строк с Age 25:n", df)

df['Age'] != 25 создаёт булевый Series. True указывает на строки, где ‘Age’ не равно 25. Использование этого для индексации df напрямую фильтрует данные, сохраняя только строки, где условие истинно. Это позволяет избежать промежуточного шага поиска индексов, что повышает скорость и эффективность использования памяти, особенно для больших наборов данных.

Использование метода .drop (менее эффективно)

Метод .drop удаляет строки по метке индекса. Для удаления на основе значений столбцов сначала необходимо определить соответствующие индексы с помощью булевого индексирования.


import pandas as pd

# Пример DataFrame (такой же, как и раньше)
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 25, 35],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)
print("Исходный DataFrame:n", df)

# Определение индексов строк, где Age равно 25
indices_to_drop = df[df['Age'] == 25].index

# Удаление строк с помощью .drop
df = df.drop(indices_to_drop)
print("nDataFrame после удаления строк с Age 25:n", df)

#Изменение на месте (непосредственно изменяет исходный DataFrame)
#df.drop(indices_to_drop, inplace=True) 

Этот подход, хотя и понятен, менее эффективен, чем булевы маски, особенно для больших DataFrame, из-за дополнительного шага идентификации и последующего удаления индексов.

Особенности производительности для больших наборов данных

Для небольших наборов данных разница в производительности между этими методами может быть незначительной. Однако для больших наборов данных булевы маски значительно превосходят метод .drop. Булевы маски работают непосредственно с базовыми данными, тогда как .drop включает создание нового DataFrame, что может привести к проблемам с памятью и замедлению обработки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *