Ich habe einen Datenrahmen in Pandas mit gemischten int- und str-Datenspalten. Ich möchte zuerst die Spalten innerhalb des Datenrahmens verketten. Dazu muss ich eine int
Spalte in konvertierenstr
. Ich habe versucht, Folgendes zu tun:
mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])
oder
mtrx['X.3'] = mtrx['X.3'].astype(str)
In beiden Fällen funktioniert es jedoch nicht und es wird die Fehlermeldung angezeigt, dass "str" - und "int" -Objekte nicht verkettet werden können. Das Verketten von zwei str
Spalten funktioniert einwandfrei.
Antworten:
Konvertieren Sie eine Serie
Vergessen Sie nicht, das Ergebnis zurückzugeben:
Konvertieren Sie den gesamten Frame
quelle
Ändern Sie den Datentyp der DataFrame-Spalte:
Zu int:
df.column_name = df.column_name.astype(np.int64)
Zu str:
df.column_name = df.column_name.astype(str)
quelle
apply(str)
von @Jeff, in meinem Test mitpd.Series(np.arange(1000000))
.df['A'] = df['A'].apply(str)
funktioniert auch. Die Antwort von @Jeff funktioniert bei mir nicht.apply()
stattastype()
: timeit.Timer ( 'c.apply (str)' Setup = 'Import Pandas als pd; c = pd.Series (Bereich ( 1000)) '). Timeit (1000) >>> 0.41499893204309046 >>> timeit.Timer (' c.astype (str) ', setup =' Pandas als pd importieren; c = pd.Series (range (1000)) ' ) .timeit (1000) 0.8004439630312845Warnung : Beide Lösungen angegeben ( astype () und apply () ) behalten weder in der nan- noch in der None-Form NULL-Werte bei.
Ich glaube, dies wird durch die Implementierung von to_string () behoben
quelle
Verwenden Sie den folgenden Code:
quelle
Nur als zusätzliche Referenz.
Alle oben genannten Antworten funktionieren im Falle eines Datenrahmens. Wenn Sie jedoch beim Erstellen / Ändern einer Spalte Lambda verwenden, funktioniert dies nicht, da es dort als int-Attribut anstelle von Pandas-Reihen betrachtet wird. Sie müssen str (target_attribute) verwenden, um es als Zeichenfolge zu erstellen. Bitte beziehen Sie sich auf das folgende Beispiel.
quelle