Если вы используете CSV, Excel или Markdown таблицы, вы можете столкнуться с дублирующимися строками. Это может произойти, если вы вручную ввели одинаковые данные или импортировали дубликаты из других источников. Какова бы ни была причина, удаление дублирующихся строк — важная часть очистки данных. В этой статье мы расскажем о нескольких способах быстрого удаления дублирующих строк из CSV, Excel и Markdown таблиц.
1. Онлайн-инструмент для таблиц (рекомендуется)
Вы можете использовать онлайн-инструмент под названием "TableConvert" для удаления дублирующих строк. С помощью этого инструмента вы легко сможете проверить и удалить дублирующиеся строки в ваших CSV, Excel и Markdown таблицах. Просто откройте браузер и перейдите по ссылке https://tableconvert.com/excel-to-excel, вставьте или загрузите ваши данные и нажмите кнопку "Deduplicate" в редакторе таблиц. Это быстро и легко. Посмотрите на изображение ниже:
![Удаление дублирующихся строк из таблиц CSV, Excel, Markdown](https://habrastorage.org/getpro/habr/upload_files/08b/984/52c/08b98452c0a739f137203e85a9aacd82.png)
2. Удаление дублирующихся строк в Excel
Удаление дублирующихся строк в Excel очень просто. Сначала откройте файл Excel и выберите столбец, в котором хотите проверить дублирующиеся строки. Затем нажмите на меню "Данные" и выберите "Удалить дубликаты". Excel покажет диалоговое окно, в котором вам нужно выбрать столбцы для удаления дубликатов. Нажмите "ОК", и Excel удалит все дублирующиеся строки.
3. Удаление дублирующихся строк в CSV с помощью Python
Если ваши данные сохранены в файле CSV, вы можете использовать Python для удаления дублирующихся строк. Сначала установите библиотеку pandas
. Затем используйте следующий код для чтения файла CSV, удаления дублирующихся строк и сохранения чистых данных обратно в файл:
import pandas as pd
data = pd.read_csv("your_file.csv")
data = data.drop_duplicates()
data.to_csv("your_file.csv", index=False)
Этот код читает файл CSV, удаляет дублирующиеся строки и записывает чистые данные обратно в исходный файл.
Комментарии (21)
FanatPHP
06.08.2024 06:42+2Я вижу, вы пытаетесь начать карьеру журналиста. В принципе, настолько слабые статьи поначалу - это нормально, со временем научитесь. Но вот только Хабр - не очень подходящая площадка для тренировки. Попробуйте сначала свои силы где-нибудь на пикабу.
Lazytech
06.08.2024 06:42+2Если ваши данные сохранены в файле CSV, вы можете использовать Python для удаления дублирующихся строк. Сначала установите библиотеку pandas. <...>
В таких простых случаях частенько можно обойтись без внешних зависимостей, например:
python - How to remove duplicates from a csv file - Stack Overflow
with open('1.csv', 'r') as in_file, open('2.csv', 'w') as out_file: seen = set() # set for fast O(1) amortized lookup for line in in_file: if line in seen: continue # skip duplicate seen.add(line) out_file.write(line)
Как мне кажется, использование библиотеки pandas в данном случае - явный overkill...
FanatPHP
06.08.2024 06:42+1Ну и если мы на линкусе, то даже питон не нужен, хватит одной короткой команды, использующей встроенные утилиты баша
Lazytech
06.08.2024 06:42+2Насколько я понимаю, на всех популярных десктопных платформах есть встроенные средства для решения подобных задач. Но, если человек уже использует Python или какой-то другой ЯП, почему бы им не воспользоваться.
radium
06.08.2024 06:42+7Linux / Mac:
$ cat test.txt test 1 test 2 test 3 test 3 test 4 $ cat test.txt | uniq test 1 test 2 test 3 test 4 $ cat test.txt | uniq -u test 1 test 2 test 4
FanatPHP
06.08.2024 06:42+1Вот только второй вариант в принципе пропускает дубликаты, и к нему нужно добавить sort, чтобы остались все уникальные строки.
Regex101
06.08.2024 06:42+2Когда повторяющиеся данные не идут друг за другом, сначала нужно отсортировать их, а затем удалить дубликаты.
/tmp ❯ cat test.txt
test 1
test 2
test 3
test 3
test 4
test 1/tmp ❯ cat test.txt | uniq
test 1
test 2
test 3
test 4
test 1/tmp ❯ cat test.txt | sort | uniq
test 1
test 2
test 3
test 4/tmp ❯ cat test.txt | sort -u
test 1
test 2
test 3
test 4
lovermann
06.08.2024 06:42+1Я думаю, что человек, который знает, как пользоваться пайтоном и более того одной из его библиотек, уже давно будет знать, как заниматься устранением дупликатов или сортировкой. И тогда не очень понятно, кто является ЦА этого мануала.. Больше напоминает: соберите и настройте веб-сервер, а теперь я расскажу, как с помощью HTML выделить текст болдом.
adeshere
06.08.2024 06:42Добавлю свои пять копеек.
Вариант 1. Если файл небольшой (можно его скушать в Exell и там отсортировать), я часто делаю так:
1) Гружу данные в Exell.
2) Создаю столбец-ключ с номерами строк. Автозаполняю его этими номерами.
3) Сортирую таблицу по нужному полю (полям), которые будут проверяться на дубли.
(Если их больше трех, то мой старый Е такое не может, и я дополнительно делаю сперва сцепку из нужных полей)
4) Добавляю столбец, в котором вычисляется разностная функция двух соседних строк. Это может быть не только точное совпадение, но и какой-то другой критерий.
5) Сортирую таблицу по столбцу с результатами вычисления этой функции
6) Удаляю ненужные строки, которые не прошли мой критерий. Если результат функции - это число (а не логическое значение), то часто точный критерий удаления выбирается уже на этом этапе, после анализа результатов. Например, таким способом можно удалить из каталога землетрясений события, у которых время отличается не более, чем на 0.5с, а разность в координатах соизмерима с погрешностью их расчета. Перед тем, как принять окончательное решение по критерию, часто бывает полезно посмотреть на фактически присутствующие в каталоге "пары".
7) Восстанавливаю исходный порядок строк, сортируя оставшиеся в таблице строки по созданному на втором шаге ключу
8) Удаляю все созданные в процессе столбцы.Вариант 2. Если файлы большие, или нужна потоковая обработка многих файлов, то могу предложить еще один метод из личной заначки. Он позволяет сравнивать строки не целиком, а по первым n символам, но только если дубль-строки идут подряд, и только в тех случаях, когда данные можно экспортировать в ASCII-формат (csv тоже сгодится) и обратно. И при условии, что Вы не побоитесь использовать
чужую программу
Она, конечно, выложена с исходниками и почти опенсорсная... Но если вдруг что-то пойдет не так, то претензии предъявлять будет некому. Разве что наплевать в карму автору ;-))
Более конкретно, вот в этой папке Яндекс-диска выложена пара десятков написанных мной в разное время перекодировщиков, которые
какую только фигню не делают с ASCII-файлами
В том числе и удаляют повторные строки. Краткое описание этих перекодировщиков лежит вот тут.
Но, некоторые из перекодировщиков есть только в DOS-версии - я их так и не пересобрал под Win, так как за последние 20 лет они мне ни разу
не пригодились
Например, в DOS многие редакторы затруднялись работать с очень большими файлами, а у меня таких много. Или "не умели" в прямоугольный блок (а мне надо было добавлять/удалять столбцы данных). Поэтому я для самых простых операций (типа замены в файле одного "символа" на другой - такое у меня с концами строк было) часто писал отдельную утилиту. А сейчас то же самое проще сделать в редакторе...
В частности, там есть исходный код и exe-шник программы DelDouble. Она читает текстовый файл и убирает оттуда повторяющиеся строки, но только если они идут подряд друг за другом. В командной строке можно задать число символов, по которым проводится сравнение строк (тогда правые части строк могут не совпадать - они все равно считаются дублями).
Кому интересно - берите ;-)
Два предупреждения
Первое: все эти программы распространяются as is, то есть я их написал для решения своей конкретной задачи и ее решение было единственным тестом ;-) Правда, за долгие годы большинство этих программ потом использовались повторно для решения других аналогичных задач, так что некоторый запас универсальности в них заложен. Может, и вам что-нибудь пригодится.
Второе: все эти программы написаны на фортране. Понимаю, что стек специфичный, поэтому вместе с исходниками там всегда лежит и exe-шник. Но будьте готовы, что пересобрать любую прогу под себя Вам будет проблематично. Причем, дело не только в языке, но и в зависимостях: там используется моя собственная библиотека функций (фактически фреймворк), на котором написан пакет ABD. Исходники этих функций (и всего этого пакета) можно найти вот тут... однако за 30 лет я их неоднократно рефакторил, и отдельные изменения, особенно связанные с переходом из среды DOS в Windows, не имеют обратной совместимости (мог измениться список параметров функции, а иногда даже ее название). Я сейчас изредка пересобираю свои старые DOS-перекодировщики, чтобы не париться с DosBox при их запуске, и далеко не всегда это получается без внесения правок в код.
А впрочем, любителям экзотических видов секса может понравиться ;-)
HiLander
Хмм... Вы предлагаете специально под задачу удаления строк в CSV ставить себе змеюку (да еще и библиотеку поставить)? Позвольте, не проще ли открыть его в том же Excel и повторить фокус №1?
FanatPHP
Он ничего не предлагает, он пытается написать статью, но не очень понимает, как это делается :)
Andy1000 Автор
Есть варианты, зависит от того, что тебе удобнее.
alexhu
Размеры файлов бывают очень большие, некоторые даже в Excel не откроются. Так что 4 строчки кода - это очень скромно, pandas проверенная библиотека.
censor2005
В LibreOffice я что то сходу не нашёл как удалять дубликаты. Не помню, как потом я решил проблему, чисто технически Python скрипт мне наверное подошёл бы.
select26
https://pq.hosting/help/instructions/94-udaljaem-dublikaty-libreoffice-calc.html
censor2005
Почитал, получается это делается с помощью фильтров. Сам бы не догадался, так как в Excel фильтры не удаляют данные, а только скрывают их. Был уверен, что в LibreOffice фильтры работают точно так же.