Удаление дубликатов в Pandas DataFrame по выбранным колонкам

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для удаления дубликатов в DataFrame библиотеки Pandas достаточно использовать метод drop_duplicates(). Чтобы исключить дубликаты по конкретным столбцам, применяйте аргумент subset. При использовании keep='first' сохраняется первое появление дубликата. Вот пример применения этого метода:

Python
Скопировать код
import pandas as pd

# Создание DataFrame
df = pd.DataFrame({'A': [1, 1, 2], 'B': [2, 2, 2], 'C': [3, 3, 3]})

# Удаляем дублированные строки
df_unique = df.drop_duplicates()

print(df_unique)

При помощи метода drop_duplicates() удаляются все последующие дублированные строки, и в итоге DataFrame содержит только уникальные строки.

Кинга Идем в IT: пошаговый план для смены профессии

Подробнее о функции drop_duplicates

Если вы хотите исключить дубликаты по определённым столбцам, используйте параметр subset:

Python
Скопировать код
# Удаляем дубликаты по столбцам 'A' и 'C'
df_unique = df.drop_duplicates(subset=['A', 'C'])  # Subset – надежный помощник в работе с дубликатами!

Для полного удаления всех дубликатов, примените keep=False:

Python
Скопировать код
# Удаляем все дублированные строки
df_no_duplicates = df.drop_duplicates(subset=['A', 'C'], keep=False)  # С использованием keep=False дубликаты не сохраняются!

Чтобы внести изменения непосредственно в исходный DataFrame, установите inplace=True:

Python
Скопировать код
# Изменяем исходный DataFrame (отменить изменения невозможно!)
df.drop_duplicates(subset=['A', 'C'], keep=False, inplace=True)  # Учитывайте важность выбора между влиянием на данные и обязанностью по поддержанию их целостности!

Как справиться с хитрыми дубликатами

Иногда дубликаты могут "маскироваться", создавая иллюзию различия благодаря мелким отличиям. Для их выявления, перед использованием drop_duplicates(), рекомендуется предварительно обработать данные, убирая лишние пробелы, приводя текст к единому регистру или используя методы текстового сопоставления.

drop_duplicates против SQL

Метод drop_duplicates по назначению напоминает SQL-команду SELECT DISTINCT *, так как оба предназначены для выявления уникальных записей. Тем не менее, параметры keep и subset придают drop_duplicates большую гибкость в сравнении с SQL.

Визуализация

Проиллюстрируем DataFrame на примере корзины с фруктами:

Markdown
Скопировать код
Корзина с фруктами (DataFrame):

🍎 Яблоко 1: [Фуджи, Япония, 2022]
🍐 Груша 2: [Бартлетт, США, 2022]
🍎 Яблоко 3: [Фуджи, Япония, 2022] (Дубликат!)
🍊 Апельсин 4: [Валенсия, Испания, 2022]

Удаление дубликатов гарантирует уникальность каждого фрукта в корзине:

Markdown
Скопировать код
После очистки:

🍎 Яблоко 1: [Фуджи, Япония, 2022]
🍐 Груша 2: [Бартлетт, США, 2022]
🍊 Апельсин 4: [Валенсия, Испания, 2022]

В Pandas очистить данные от дубликатов просто:

Python
Скопировать код
df.drop_duplicates()

Теперь в вашей корзине только уникальные фрукты! 🎉

Другие средства очистки уникальных данных

В Pandas существуют различные методы для удаления дубликатов. Изучайте их для улучшения своих навыков программирования.

Group by и filter

Когда требуется более сложная логика для исключения дубликатов, вам помогут методы groupby и filter. Например, если требуется удалить строки с одинаковыми значениями в столбце 'A' при игнорировании остальных:

Python
Скопировать код
# Группируем и фильтруем, чтобы оставить только уникальные значения
df_filtered = df.groupby('A').filter(lambda x: len(x) == 1)

Комбинирование sort_values с drop_duplicates

Используйте комбинацию методов sort_values и drop_duplicates(), чтобы после удаления дубликатов сохранились наиболее актуальные данные:

Python
Скопировать код
# Сначала сортируем, затем удаляем дубликаты
df_sorted_uniques = df.sort_values(by='A', ascending=True).drop_duplicates(subset=['A'], keep='last')

Возможные проблемы и их решение

Внимательно относитесь к устаревшим параметрам, таким как take_last и cols. Следуйте актуальному API, чтобы избежать проблем совместимости. При наличии сомнений всегда консультируйтесь с последней версией документации Pandas.

Полезные материалы

  1. pandas.DataFrame.drop_duplicates — документация pandas 2.2.0 — Подробная информация о методе drop_duplicates().
  2. Обработка дубликатов — документация pandas 2.2.0 — Расширенная информация о методах обработки дубликатов в Pandas.
  3. Удаление всех дубликатов строк в Pandas Python по нескольким столбцам – Stack Overflow — Сборник решений вопросов о работе с дубликатами.
  4. Советы и приёмы работы с Pandas — Статья с полезными рекомендациями.
  5. Python | Pandas dataframe.drop_duplicates() – GeeksforGeeks — Понятное руководство по использованию метода drop_duplicates() от GeeksforGeeks.