Как удалить дубликаты во фрейме данных с другим форматом?

#python #pandas #dataframe

Вопрос:

Итак, я просматриваю набор данных, который я видел в Интернете, и я заметил много дубликатов, но с другим форматированием. Например, в столбце имя некоторые люди начали вводить свое имя в LN, FN, MI, в то время как некоторые люди вводили свое имя в формате FN, MI, LN. Как я могу удалить эти дубликаты? Спасибо!

Ниже приведен пример столбца во фрейме данных.

Имя
Доу, Джон Д.
Джон Д. Доу

Комментарии:

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Вероятно, было бы лучше обработать этот столбец, чтобы все было в одном формате. Для имен это должно быть довольно просто, так как в любое время, когда фамилия пишется первой, после нее будет запятая. Что-то подобное должно быть довольно близко, тогда вы сможете удалить дубликаты. ( lstrip Строковый метод просто удаляет начальные пробелы.)

 new_names = []
for name in df["Name"]:
    split_name = name.split(",")
    if len(split_name) > 1:
        name = " ".join([split_name[1].lstrip(), split_name[0]])
    new_names.append(name)
 

Примечание: это определенно не самый эффективный по времени или памяти способ сделать это.

Ответ №2:

Возможным решением этого может быть попытка перевести формат в стандартизированную форму с помощью команды применить следующим образом : введите описание изображения здесь

Объяснение:

  1. С помощью apply мы можем выполнить операцию над каждой строкой в этом столбце, представленном x.
  2. Сначала мы заменим знаки препинания с помощью замены («что заменить», «чем заменить») и избавимся от запятых и точек. Также можно использовать регулярное выражение
  3. Затем мы применяем разделение (‘ ‘ ), чтобы получить список только имен, которые будут выглядеть следующим образом [«Доу», «Джон», «Д»] для первой строки и [«Джон», «Д», «Доу»] для второй строки
  4. Затем, сортируя список, мы получаем, что оба списка имеют одинаковый порядок [‘D’, ‘Doe’, ‘John’], и когда мы произносим оба списка, мы говорим, что, поскольку в этом примере всего две строки, apply будет делать это для каждой строки
  5. Наконец, мы используем внешнюю функцию ‘ ‘.join() для преобразования представления стиля списка обратно в строку, в результате чего имя столбца теперь отображается в том же формате и в том же порядке. Затем мы назначаем это обратно в список, чтобы заменить его на месте

Теперь, используя метод drop_duplicates (), мы можем избавиться от дубликатов

Обратите внимание, что этот метод не будет работать, если имена не имеют одинакового набора строк. Например, если бы один из них был Доу Джон Ди, а другой-Доу Джон Денис, нужно было бы быть более осторожным в том, как их идентифицировать и отсеять.

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