У меня есть фрейм данных "b" с номерами, хранящимися как текст типа '12 .5% '. Одна колонка:python применить функцию к df pandas - ошибка атрибута
1 NaN
2 NaN
3 1.2%
4 0.6%
5 NaN
6 1.4%
7 0.1%
8 NaN
9 5.1%
10 2.5%
11 89.1%
12 NaN
Name: Idaho, dtype: object
Я написал функцию, чтобы применить к каждой колонке:
def sinPorc(tbl):
return float(tbl.replace('%', ''))
, но когда я пытаюсь применить его я получаю:
b.Idaho.apply(sinPorc)
AttributeError: 'float' object has no attribute 'replace'
Я также создал примерную таблицу и применил функцию, но в этом случае работал:
ejemplo=pd.DataFrame({'A':['1.3%', 'NaN'],
'B':['1.3%', '0.7%']})
ejemplo.A.apply(sinPorc)
и я получил ожидаемый результат:
1.3
NaN
Name: A, dtype: float64
Я не знаю, почему я не могу применить функцию к исходной таблице. Что может быть проблемой и что я должен сделать, чтобы решить эту проблему?
Спасибо.
Try: 'поплавок (ул (TBL) .Надеть ('%', ''))' в 'def' function.You необходимо привести свои элементы строки как' string' для 'replace' работать. –
Спасибо @NickilMaveli, все в порядке. Я не понимаю, почему исходная функция работала во второй таблице, не требуя этого. – GabyLP
Похоже, что в столбце уже есть значения с плавающей запятой. Я попытался реплицировать значения как строковый тип, а затем как типы float. Может быть полезно отлаживать, набрав 'type (b.Idaho [0])', предполагая, что индекс 0 имеет значение, которое не является 'NaN' –