Если вы используете CSV, Excel или Markdown таблицы, вы можете столкнуться с дублирующимися строками. Это может произойти, если вы вручную ввели одинаковые данные или импортировали дубликаты из других источников. Какова бы ни была причина, удаление дублирующихся строк — важная часть очистки данных. В этой статье мы расскажем о нескольких способах быстрого удаления дублирующих строк из CSV, Excel и Markdown таблиц.

1. Онлайн-инструмент для таблиц (рекомендуется)

Вы можете использовать онлайн-инструмент под названием "TableConvert" для удаления дублирующих строк. С помощью этого инструмента вы легко сможете проверить и удалить дублирующиеся строки в ваших CSV, Excel и Markdown таблицах. Просто откройте браузер и перейдите по ссылке https://tableconvert.com/excel-to-excel, вставьте или загрузите ваши данные и нажмите кнопку "Deduplicate" в редакторе таблиц. Это быстро и легко. Посмотрите на изображение ниже:

Удаление дублирующихся строк из таблиц CSV, Excel, Markdown
Удаление дублирующихся строк из таблиц CSV, Excel, Markdown

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)


  1. HiLander
    06.08.2024 06:42

    Хмм... Вы предлагаете специально под задачу удаления строк в CSV ставить себе змеюку (да еще и библиотеку поставить)? Позвольте, не проще ли открыть его в том же Excel и повторить фокус №1?


    1. FanatPHP
      06.08.2024 06:42
      +5

      Он ничего не предлагает, он пытается написать статью, но не очень понимает, как это делается :)


    1. Andy1000 Автор
      06.08.2024 06:42

      Есть варианты, зависит от того, что тебе удобнее.


    1. alexhu
      06.08.2024 06:42

      Размеры файлов бывают очень большие, некоторые даже в Excel не откроются. Так что 4 строчки кода - это очень скромно, pandas проверенная библиотека.


    1. censor2005
      06.08.2024 06:42

      В LibreOffice я что то сходу не нашёл как удалять дубликаты. Не помню, как потом я решил проблему, чисто технически Python скрипт мне наверное подошёл бы.


      1. select26
        06.08.2024 06:42

        https://pq.hosting/help/instructions/94-udaljaem-dublikaty-libreoffice-calc.html


        1. censor2005
          06.08.2024 06:42

          Почитал, получается это делается с помощью фильтров. Сам бы не догадался, так как в Excel фильтры не удаляют данные, а только скрывают их. Был уверен, что в LibreOffice фильтры работают точно так же.


  1. FanatPHP
    06.08.2024 06:42
    +2

    Я вижу, вы пытаетесь начать карьеру журналиста. В принципе, настолько слабые статьи поначалу - это нормально, со временем научитесь. Но вот только Хабр - не очень подходящая площадка для тренировки. Попробуйте сначала свои силы где-нибудь на пикабу.


  1. 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...


    1. FanatPHP
      06.08.2024 06:42
      +1

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


      1. Lazytech
        06.08.2024 06:42
        +2

        Насколько я понимаю, на всех популярных десктопных платформах есть встроенные средства для решения подобных задач. Но, если человек уже использует Python или какой-то другой ЯП, почему бы им не воспользоваться.


        1. FanatPHP
          06.08.2024 06:42

          Потому что если есть встроенные средства, то писать отдельную программу - это явный overkill?


          1. Lazytech
            06.08.2024 06:42

            Могу только за вас порадоваться. Я вот программирую на JavaScript и на Python, а вот имеющийся "искаропки" PowerShell так и не освоил...


            1. FanatPHP
              06.08.2024 06:42

              Ну если речь про powershell, то соглашусь. Какой-то там синтаксис... ненатуральный.


              1. Lazytech
                06.08.2024 06:42

                Если что, ничего не имею против встроенных средств, включая PowerShell. Также восхищаюсь теми, кто пишет навороченные bat-файлы (своего рода магия).


  1. radium
    06.08.2024 06:42
    +7

    Linux / 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
    


    1. FanatPHP
      06.08.2024 06:42
      +1

      Вот только второй вариант в принципе пропускает дубликаты, и к нему нужно добавить sort, чтобы остались все уникальные строки.


    1. 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


  1. lovermann
    06.08.2024 06:42
    +1

    Я думаю, что человек, который знает, как пользоваться пайтоном и более того одной из его библиотек, уже давно будет знать, как заниматься устранением дупликатов или сортировкой. И тогда не очень понятно, кто является ЦА этого мануала.. Больше напоминает: соберите и настройте веб-сервер, а теперь я расскажу, как с помощью HTML выделить текст болдом.


  1. 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 при их запуске, и далеко не всегда это получается без внесения правок в код.

    А впрочем, любителям экзотических видов секса может понравиться ;-)


  1. Kryptonets
    06.08.2024 06:42

    В Excel есть функция УНИК...