2017-07-18 2 views
0

Diese Frage wurde in vielen Threads gestellt und hat für andere funktioniert, aber nicht für mich. Ich versuche, object Datentyp in int zu konvertieren, um eine Gruppe durch Aggregation durchzuführen. Im Folgenden sind, was ich versucht und die Fehler, die ich so weit gekommen, (ich bin mit Python 3) Nach diesem Link habe ich versucht, these two:Fehler: Die Zeichenfolge "*" konnte an der Position 6116 nicht analysiert werden. - Objekttyp in Int konvertieren - Pandas

df['my_var'] = df['my_var'].astype(str).astype(int) 
df['my_var'] = df['my_var'].astype(int) 

gleichen Fehler für beide:

ValueError: invalid literal for int() with base 10: '*'

und dann habe ich tried,

df['my_var'] = pd.to_numeric(df['my_var']) 

bekam ich einen Fehler:

ValueError: Unable to parse string "*" at position 6116

Dies ist, wie dtypes aussieht,

print (df.dtypes) 
my_var object 
dtype: object 

Ich kenne einige der ähnliche Fragen werden abgewählt, aber ich habe mit diesen Antworten nicht gelingen. Ist es ein Versionsfehler? Ich finde es schwierig, diesen Fehler zu verstehen. Jede Hilfe oder Anregung wäre willkommen.

+0

Irgendwo in Ihrem Datenrahmen (tatsächlich an der Position 6116) haben Sie einen String '„*“', dass Sie auf eine ganze Zahl zu konvertieren versuchen. Tu das nicht. – DyZ

+0

@DYZ Ich habe mit 'df.applymap (np.isreal)' nach Sonderzeichen gesucht und es war alles 'fase', das ist die richtige Art zu überprüfen? –

+0

Aber Sie versuchen, zu Ganzzahlen zu konvertieren, nicht Reals. Sie sind nicht gleich. – DyZ

Antwort

0

Nach dem Erhalten von Vorschlägen von #DYZ und #MaxU war es ein Fehler aufgrund des Sonderzeichens * hintereinander in meinem DataFrame. (Fehlermeldung war offensichtlich)

Wie vorgeschlagen, zu verwenden,

df[df['my_var']=='*'] 

und

df.loc[pd.to_numeric(df['my_var'], errors='coerce').isnull()] 

Ich fand, wo genau das Sonderzeichen war. Verwenden Sie dann die Methode für den regulären Ausdruck, um Sonderzeichen mit dieser thread abzustreifen.

1

Ich habe 0 verwendet, um alles zu ersetzen, das keine Zahl ist, aber Sie können jeden anderen Wert verwenden, der für Sie sinnvoll ist, z. -999999 (kein vorgeschlagene Praxis offensichtlich aber nur ein Beispiel)

pd.to_numeric(df.my_var, errors='coerce').fillna(0).astype(int) 
Verwandte Themen