Метод drop_duplicates
Метод drop_duplicates применяется к DataFrame
и возвращает новый объект с удалёнными дублирующимися строками.
По умолчанию метод считает дубликатами строки, где все значения
совпадают с другой строкой. Первым параметром можно передать
название столбца или список столбцов для проверки дубликатов.
Метод оставляет первую встреченную строку из дублирующихся,
а остальные удаляет.
Параметр keep определяет, какую из дублирующихся строк
оставить: 'first' (первую), 'last' (последнюю)
или False (удалить все дублирующиеся строки полностью).
Параметр subset принимает список столбцов для сравнения,
параметр inplace при значении True изменяет
исходный объект.
Синтаксис
df.drop_duplicates([subset], [keep], [inplace])
Пример
Создадим таблицу с дублирующимися строками и удалим их:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3],
'b': [10, 10, 20, 30, 40]
})
res = df.drop_duplicates()
print(res)
Результат выполнения кода:
a b
0 1 10
2 2 20
3 2 30
4 3 40
Из таблицы удалилась вторая строка, поскольку она полностью дублирует первую.
Пример
Рассмотрим удаление дубликатов с оставлением последней строки:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2],
'b': [10, 10, 20, 30]
})
res = df.drop_duplicates(keep='last')
print(res)
Результат выполнения кода:
a b
1 1 10
2 2 20
3 2 30
В результате оставили последнюю строку из дублирующихся, а первую удалили.
Пример
Удалим все строки, где дублируются значения в столбце a:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3],
'b': [10, 20, 20, 30, 40]
})
res = df.drop_duplicates(subset=['a'])
print(res)
Результат выполнения кода:
a b
0 1 10
2 2 20
4 3 40
Метод удалил строки с индексами 1 и 3, так как
в столбце a в них были значения 1 и 2,
которые уже встречались ранее.
Пример
Удалим все дублирующиеся строки полностью, оставив только уникальные:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 3],
'b': [10, 10, 20, 30, 40]
})
res = df.drop_duplicates(keep=False)
print(res)
Результат выполнения кода:
a b
2 2 20
3 2 30
4 3 40
Строки с индексами 0 и 1 удалились полностью, так как они дублировали друг друга, и метод не оставил ни одну из них.
Пример
Проверим удаление дубликатов на основе нескольких столбцов:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 1],
'b': [10, 10, 20, 30, 20],
'c': [100, 100, 200, 300, 400]
})
res = df.drop_duplicates(subset=['a', 'b'])
print(res)
Результат выполнения кода:
a b c
0 1 10 100
2 2 20 200
3 2 30 300
4 1 20 400
Метод удалил только строку с индексом 1, так как
в ней значения столбцов a и b
совпадали со строкой с индексом 0.
Пример
Изменим исходный DataFrame с помощью параметра inplace:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 3],
'b': [10, 10, 20, 30]
})
df.drop_duplicates(inplace=True)
print(df)
Результат выполнения кода:
a b
0 1 10
2 2 20
3 3 30
Исходный объект изменился непосредственно, без создания копии. Вторая строка была удалена из таблицы.
Смотрите также
-
метод
duplicated,
который возвращает булеву маску дублирующихся строк -
метод
dropna,
который удаляет строки с пропущенными значениями -
метод
drop,
который удаляет указанные столбцы или строки -
метод
replace,
который заменяет значения в таблице по условию