Ошибка объекта «float» не имеет атрибута «закодировать» при использовании apply (unidecode) к столбцу информационного кадра str - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь удалить акценты из столбца информационного кадра, используя цикл for, но я продолжаю получать сообщение об ошибке «У объекта с плавающей точкой нет атрибута encode», и это столбец str. Самое смешное, что я применяю этот цикл в двух точках моего кода, и он только идентифицирует ошибку во второй точке.

df_ = df_target.copy()

for col in df_:
    if col == 'estado' or col == 'cidade' and (df_[col] is not None and isinstance(df_[col], str)):
        print(df_[col].head(100))
        df_[col] = df_[col].apply(unidecode)

df_target - это кадр данных pandas, перед этим шагом,он получает данные из файла CSV

col читает имена столбцов из кадра данных

df_ [col] должен читать все элементы в столбцах с именем estado (штат) и cidade (город)

Я просто хочу удалить все акценты из этих двух столбцов.

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

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Просто для справки, я решил свою проблему, «заставив» все свои элементы серии на стр.

        for col in df_target:
        if col == 'estado' or col == 'cidade':
            df_target[col] = df_target[col].astype(str)
            df_target[col] = df_target[col].apply(unidecode)

Я думаю, что это не было более разумным решением, но я боролся и выбрал это решение. потому что мой срок был коротким.

Спасибо за помощь, ребята!

0 голосов
/ 26 октября 2019

Это может быть из-за приоритета оператора. or имеет более высокий приоритет, чем and.

Таким образом, заключение в скобки может помочь.

if (col == 'estado' or col == 'cidade') and (df_[col] is not None and isinstance(df_[col], str)):

во-вторых. вместо цикла for. определить предикат и передать предикат в функцию применения

def pred(x):
    # code

df_.apply(pred, axis=1)
...