2017-01-11 7 views
0

Ich habe eine Liste mit Werten, die Nummer sein sollte. Gerade jetzt sind sie ein Objekt jedoch:Kann ein Objekt nicht in einen int konvertieren

later  object 
opstarten object 
dtype: object 

Ich habe versucht, die Spalte zu einem str Typen zu ändern, indem Sie:

df_analyse_num[["later"]] = df_analyse_num[["later"]].astype(str) 

Dies scheint jedoch nicht dazu führen, zu arbeiten, wenn ich meine Art zu analysieren sagt immer noch Objekt.

Auch wenn ich versuche, es in eine Zeichenfolge zu konvertieren, geht etwas schief. Wenn ich das tue:

df_analyse_num[["later"]] = df_analyse_num[["later"]].astype(str).astype(int) 

Es gibt mir die folgende Fehlermeldung:

File "pandas\lib.pyx", line 937, in pandas.lib.astype_intsafe (pandas\lib.c:16667) 
File "pandas\src\util.pxd", line 60, in util.set_value_at (pandas\lib.c:67540) 
ValueError: invalid literal for int() with base 10: '30.0' 

Irgendwelche Gedanken, wo dies schief geht?

+0

kein Experte für Pandas, aber versuchen 'float' dann' int': ' something.astype (str) .asype (float) .asyp (int) ' –

+0

Total funktioniert, danke! –

+2

Zuerst bezieht sich 'object' auf die Anzahl der Objekttypen, die korrekt sind. Sie werden' str' nicht als 'dtype' in Pandas sehen. Zweitens, wenn Sie Ihre Spalte in numerische Werte umwandeln wollen' pd.to_numeric (df_analyse_num ["später") "], errors = 'coerce')' dies leitet den passenden Typ, 'int' für die Stelle ab, an der Sie keine fehlenden Werte haben und alle Werte in 'int' ohne Fehler oder float umgewandelt werden können. Auch mit doppelten eckigen Klammern: 'df_analyse_num [[" später "]]' gibt eine einzelne Spalte df statt einer Serie zurück, falls Sie es nicht wussten – EdChum

Antwort

1

Nicht ein Experte für Pandas, aber versuchen float zuerst die Dezimalstelle zu handhaben, die einen Schwimmer zeigt, dann int:

something.astype(str).astype(float).astype(int) 

Hier ist das Problem in "native" Python:

int('30.0') 

Welche nicht ähnlich:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '30.0' 

Wenn wir float verwenden zuerst funktioniert es seit float zu int Umwandlung ist möglich:

int(float('30.0')) 

Erwartetes Ergebnis:

30 
Verwandte Themen