Как удалить или объединить строку с ошибками в python? Использование pandas или другой библиотеки

#python #pandas

#python #pandas

Вопрос:

У меня есть 5 строк, где имя класса отличается (опечатка), но содержит те же данные. Например

 > classs                                 ...                      
> Iris-setosa                   44       ...                    44
> Iris-setossa                   1       ...                     1
> Iris-versicolor               45       ...                    45
> Iris-virginica                50       ...                    50
> versicolor                     5       ...                     5
 

Здесь я хочу объединить класс Versicolor с iris-Versicolor и iris-setossa (дополнительные s) с iris-setosa.

Я пробовал.функция join .concat объединяет весь столбец со строкой. как внешнее соединение, innerJoin . Но я хочу рассматривать versicolor как iris-versicolor, а iris-setossa как iris-setosa.

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

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

Ответ №1:

Если у вас не так много строк с орфографическими ошибками, и это не будет утомительной задачей, вы можете просто сделать это вручную, используя str.replace :

 df['class'] = df['class'].str.replace('Iris-setosa','Iris-setossa')
df['class'] = df['class'].str.replace('Iris-versicolor','versicolor')
 

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

1. Спасибо, софоды, но на самом деле у меня есть 5000 данных, и 10% данных написаны с ошибками.

Ответ №2:

Вы можете использовать библиотеку pandas-dedupe для удаления опечаток в вашем наборе данных.
Пример кода

 import pandas as pd
import pandas_dedupe

df = pd.DataFrame({'class': ['Iris-setosa', 'Iris-setossa', 'Iris-versicolor', 'Iris-virginica', 'versicolor', 'iris-setosa', 'versicolor']})

dd = pandas_dedupe.dedupe_dataframe(
    df, 
    field_properties = ['class'], 
    sample_size=1,
    canonicalize=True
    )

# At this point pandas dedupe will ask you to label some records as distinct or duplicates.   
# Once done, you hit finish ('f') and here is the output:

#   class      cluster id   confidence  canonical_class
# 0 iris-setosa     0      1.000000       iris-setosa
# 1 iris-setossa    0      1.000000       iris-setosa
# 2 iris-versicolor 1      0.998748       versicolor
# 3 iris-virginica  2      1.000000       iris-virginica
# 4 versicolor      1      0.999115       versicolor
# 5 iris-setosa     0      1.000000       iris-setosa
# 6 versicolor      1      0.999115       versicolor
 

Если у вас есть чистый список имен (например, gazette), вы также можете попытаться выполнить дедупликацию справочника, при которой вы удаляете дубликаты, сопоставляя беспорядочные данные с gazette. pandas-dedupe также поддерживает дедупликацию справочника.