#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 также поддерживает дедупликацию справочника.