Дубликаты в Pandas
Дубликаты — это полностью или частично повторяющиеся строки. Они появляются при
повторной загрузке логов, ошибках merge или двойной отправке MQTT-сообщений.
Pandas умеет искать их (duplicated) и удалять (drop_duplicates).
Когда использовать
Слили несколько CSV — нужно убрать «накладку» по времени.
ID устройства встречается дважды по ошибке.
Готовите датасет для уникального ML-обучения.
Пример 1. Поиск дубликатов
import pandas as pd
df = pd.DataFrame({"d": ["a", "a", "b", "a"], "v": [1, 1, 2, 1]})
print(df.duplicated())
Output:
0 False
1 True
2 False
3 True
dtype: bool
duplicated помечает повторы (первое вхождение остаётся False).
Пример 2. Удаление
import pandas as pd
df = pd.DataFrame({"d": ["a", "a", "b", "a"], "v": [1, 1, 2, 1]})
print(df.drop_duplicates())
Output:
d v
0 a 1
2 b 2
Пример 3. По подмножеству столбцов
import pandas as pd
df = pd.DataFrame({
"d": ["a", "a", "b"],
"t": [0, 1, 0],
"v": [10, 11, 20],
})
print(df.drop_duplicates(subset=["d"]))
Output:
d t v
0 a 0 10
2 b 0 20
Считается уникальной по d, остальные столбцы игнорируются.
Пример 4. keep
import pandas as pd
df = pd.DataFrame({"d": ["a", "a", "b"], "v": [1, 2, 3]})
print(df.drop_duplicates("d", keep="last"))
Output:
d v
1 a 2
2 b 3
keep="first" (по умолчанию), "last", False (удалить все повторы вообще).
Пример 5. keep=False
import pandas as pd
df = pd.DataFrame({"d": ["a", "a", "b"], "v": [1, 2, 3]})
print(df.drop_duplicates("d", keep=False))
Output:
d v
2 b 3
Все строки, у которых есть «двойник», выпадают.
Пример 6. Подсчёт
import pandas as pd
df = pd.DataFrame({"d": ["a", "a", "b"]})
print("дубликатов:", df.duplicated().sum())
Output:
дубликатов: 1
Пример 7. Дубликаты индекса
import pandas as pd
df = pd.DataFrame({"v": [1, 2, 3]}, index=["a", "a", "b"])
print(df[~df.index.duplicated()])
Output:
v
a 1
b 2
Подводные камни
По умолчанию
drop_duplicatesсравнивает ВСЕ столбцы — два почти одинаковых лога могут не считаться дубликатами из-за разницы в одной ячейке.Float-сравнение чувствительно к шуму: 22.000001 и 22.000002 — разные. Округляйте перед поиском.
Дубликаты часто означают «событие повторилось», а не «ошибка». Перед удалением убедитесь, что это шум.
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.