Ich habe einen Datenrahmen, die etwa wie folgt aussieht:Pandas gelten Arbeiten auf einzelnen Spalten wie erwartet, aber nicht ganzer Datenrahmen
pd.DataFrame({'state':['AL','AL'],'statefp':[1.0,1.0]})
state statefp
0 AL 1.0
1 AL 1.0
Ich mag den gesamten Datenrahmen in type str drehen und bin die .apply
Methode. Was ich tun möchte, ist, wenn das Element vom Typ float ist, möchte ich es als eine Zeichenfolge speichern Integer, und wenn es bereits eine Zeichenfolge ist, möchte ich es Kleinbuchstaben. Ich habe dies versucht:
df.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower())
Welche dieser Ausgänge (nicht, was ich da statefp
wollte Schwimmer als String gespeichert):
state statefp
0 al 1.0
1 al 1.0
aber wenn ich das gleiche gilt für nur dass Spalte, es funktioniert gut:
>>>df.statefp.apply(lambda x: '{:.0f}'.format(x) if isinstance(x,float) else x.astype(str).str.lower())
0 1
1 1
Bin ich etwas fehlt, wie .apply
auf der gesamten Datenrahmen zu arbeiten? Ich habe auch versucht, axis='columns'
Argument von .apply
zu setzen, aber das hat auch nicht funktioniert.
Auch ich bin offen für den Versuch, anderen Code, nicht nur .apply
.
Wissen Sie, ob die 'dtype' von' np.NaN' ist 'np.float'? Es gibt einige 'NaN' in der 'statefp'-Spalte und es wirft diesen Fehler auf:' Kann NA nicht in ganze Zahlen umwandeln ',' trat bei Index-Status auf ' – LMc
@ LMc Ja, np.Nan wird als np.float betrachtet. 'type (np.nan) == np.float' gibt True zurück –