Хорошо ... так что вам может быть интересно, какого черта вам нужно удалять дубликаты в электронных таблицах с помощью Python, когда вы можете просто нажать кнопку Удалить дубликаты в Excel.

И вы вправе задать этот вопрос. Однако кнопка удаления дубликатов сохраняет ПЕРВОЕ уникальное значение и удаляет все остальные.

Что делать, если вы хотите удалить ВСЕ дубликаты? Или вы хотите удалить все, кроме ПОСЛЕДНЕГО дубликата? Или вы просто хотите знать, какие записи дублируются?

Хотя все эти ситуации можно взломать в Excel, с ними намного проще справиться в Python, и здесь, в Love Spreadsheets, мы все стараемся использовать правильный инструмент для работы.

Предварительное условие

Если вы не знаете, как запускать сценарии Python или как читать и записывать файлы с помощью Python и Pandas, то сначала прочтите это руководство.

Знакомство с чтением и написанием электронных таблиц с помощью Python

Файл

Для этого урока мы будем использовать образец файла. Вы можете скачать это здесь"

Мы будем считать запись повторяющейся, если она имеет одинаковые значения в столбцах Имя, Адрес и Дата звонка. Используя этот критерий, файл имеет три набора дубликатов, как показано ниже.

Полный код

См. Полный код ниже, чтобы следовать

Создайте файл для кода

Откройте текстовый редактор и создайте файл duplicates.py. Сохраните его в той же папке, что и файл Duplicates.xlsx.

Библиотека импорта

Строка 1

Импортируйте библиотеку pandas, чтобы читать, удалять дубликаты и писать электронные таблицы.

import pandas as pd

Прочитать файл

Строка 3

Мы собираемся читать электронную таблицу с помощью pandas и сохранять результат во фрейме данных file_df

file_df = pd.read_excel("Duplicates.xlsx")

Сохранять только ПЕРВУЮ запись набора дубликатов

Строки 6–7

Первый случай, который мы рассмотрим, такой же, как в Excel, где мы хотим удалить все дубликаты в наборе, кроме первого. Код для этого представляет собой одну строку с двумя важными параметрами.

file_df_first_record = file_df.drop_duplicates(subset=["Name", "Address", "Call Date"], keep="first")

Мы вызываем метод drop_duplicates для file_df, который мы читаем из электронной таблицы. В методе drop_duplicates есть два важных параметра.

  1. subset - список имен столбцов, которые мы считаем повторяющейся записью. В этом случае мы указали, что дубликаты - это записи с одинаковым именем, адресом и датой звонка.
  2. keep - - это запись, которую мы должны сохранить для набора дубликатов, и это параметр, который мы будем изменять в различных сценариях.

И то, и другое НЕОБЯЗАТЕЛЬНО. Если вы не укажете их, Pandas будет считать запись дублирующейся во ВСЕХ столбцах и сохранит только ПЕРВУЮ запись.

Подробнее об этом методе вы можете прочитать здесь.

Теперь мы запишем этот фрейм данных без дубликатов и только первую строку в новый файл.

file_df_first_record.to_excel("Duplicates_First_Record.xlsx", index=False)

Вот как выглядит этот файл

Сохранять только ПОСЛЕДНЮЮ запись из набора дубликатов

Строки 10–11

Это в точности идентично шагу выше, за исключением того, что мы меняем параметр keep на last

file_df_last_record = file_df.drop_duplicates(subset=["Name", "Address", "Call Date"], keep="last")

Затем мы записываем этот фрейм данных с сохранением только последней строки из набора дубликатов в новый файл.

file_df_last_record.to_excel("Duplicates_Last_Record.xlsx", index=False)

Так выглядит файл

Удалить ВСЕ записи из набора дубликатов

Строки 14–15

Теперь предположим, что мы хотим удалить все записи из набора дубликатов. В этом случае мы меняем параметр keep на False.

file_df_remove_all = file_df.drop_duplicates(subset=["Name", "Address", "Call Date"], keep=False)

Теперь мы пишем этот фрейм данных со всеми повторяющимися наборами, удаленными в файл.

file_df_remove_all.to_excel("Duplicates_All_Removed.xlsx", index=False)

Вот как выглядит этот файл

Узнайте, какие записи являются дубликатами

Строки 18–20

Хорошо, допустим, вы хотите получить список всех записей, принадлежащих к повторяющемуся набору. Это не так просто, но все же вполне выполнимо.

Сначала мы получаем список, в каких строках есть дубликаты или нет.

duplicate_row_index = file_df.duplicated(subset=["Name", "Address", "Call Date"], keep=False)

Примечание. мы используем другой метод под названием duplicated. Это дает нам список, содержащий значение Истина ИЛИ Ложь, соответствующее каждой строке в фрейме данных / электронной таблице.

В этом методе параметр keep указывает, какие строки мы хотим идентифицировать как повторяющиеся. Поскольку мы передаем FALSE, он идентифицирует все строки, которые принадлежат повторяющемуся набору. Если бы мы указали первым, он бы идентифицировал все строки, ЗА ИСКЛЮЧЕНИЕМ первой строки. Подробнее об этом методе вы можете прочитать здесь.

Затем мы получаем фактические записи из фрейма данных. Команда ниже дает нам все строки, которые были идентифицированы как дубликаты.

all_duplicate_rows = file_df[duplicate_row_index]

Наконец, мы записываем это в электронную таблицу. Здесь мы используем index = True, потому что мы также хотим получить номера строк.

all_duplicate_rows.to_excel("Duplicate_Rows.xlsx", index=True)

Вот как выглядит этот файл

ПРИМЕЧАНИЕ. Индекс Pandas основан на 0 И рассматривает заголовки столбцов как отдельные. Итак, в этом файле, поскольку у нас был заголовок, строка 1 рядом с яблоком фактически относится к строке 3 в исходном файле.

Следующий

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