Ich habe einen Datenrahmen "b" mit Zahlen als Text wie '12 .5% 'gespeichert. Eine Spalte ist:python apply function zu df pandas - atribute error
def sinPorc(tbl):
return float(tbl.replace('%', ''))
aber wenn ich es anwenden versuche ich bekommen:
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
Ich habe eine Funktion jeder Spalte anzuwenden schrieb
b.Idaho.apply(sinPorc)
AttributeError: 'float' object has no attribute 'replace'
Ich habe auch eine Beispieltabelle erstellt und die Funktion angewendet, aber in diesem Fall funktioniert:
ejemplo=pd.DataFrame({'A':['1.3%', 'NaN'],
'B':['1.3%', '0.7%']})
ejemplo.A.apply(sinPorc)
und ich bekam das erwartete Ergebnis:
1.3
NaN
Name: A, dtype: float64
Ich weiß nicht, warum ich nicht die Funktion der ursprünglichen Tabelle anwenden können. Was könnte das Problem sein und was sollte ich tun, um es zu lösen?
Danke.
Versuchen: 'float (str (TBL) .replace ('%', ''))' im 'def' function.You benötigen Zeilenelemente als' string' für die 'replace' werfen arbeiten. –
Danke @NickilMaveli, es ist in Ordnung. Ich verstehe nicht, warum die ursprüngliche Funktion in der zweiten Tabelle funktioniert hat, ohne diese zu benötigen. – GabyLP
Es klingt, als ob die Spalte bereits Float-Werte enthält. Ich habe versucht, mit den Werten als String-Typ und dann als Float-Typen zu replizieren. Es kann hilfreich sein, zu debuggen, indem Sie 'type (b.Idaho [0])' eingeben, vorausgesetzt, dass der Index 0 einen Wert hat, der nicht 'NaN' ist –