So beheben sie: valueerror: float nan kann nicht in int konvertiert werden
Ein Fehler, der bei der Verwendung von Pandas auftreten kann, ist:
ValueError : cannot convert float NaN to integer
Dieser Fehler tritt auf, wenn Sie versuchen, eine Spalte in einem Pandas-DataFrame von einer Gleitkommazahl in eine Ganzzahl zu konvertieren, wenn die Spalte NaN-Werte enthält.
Das folgende Beispiel zeigt, wie dieser Fehler in der Praxis behoben werden kann.
So reproduzieren Sie den Fehler
Angenommen, wir erstellen den folgenden Pandas-DataFrame:
import pandas as pd import numpy as np #createDataFrame df = pd. DataFrame ({' points ': [25, 12, 15, 14, 19, 23, 25, 29], ' assists ': [5, 7, 7, 9, 12, 9, 9, 4], ' rebounds ': [11, np. no , 10, 6, 5, np. no , 9, 12]}) #view DataFrame df points assists rebounds 0 25 5 11 1 12 7 NaN 2 15 7 10 3 14 9 6 4 19 12 5 5 23 9 NaN 6 25 9 9 7 29 4 12
Derzeit ist die Spalte „Bounces“ vom Datentyp „Float“.
#print data type of 'rebounds' column df[' rebounds ']. dtype dtype('float64')
Angenommen, wir versuchen, die Spalte „Bounces“ von einer Gleitkommazahl in eine Ganzzahl umzuwandeln:
#attempt to convert 'rebounds' column from float to integer df[' rebounds '] = df[' rebounds ']. astype (int) ValueError : cannot convert float NaN to integer
Wir erhalten einen ValueError , da die NaN-Werte in der Spalte „Bounces“ nicht in ganzzahlige Werte konvertiert werden können.
So beheben Sie den Fehler
Die Möglichkeit, diesen Fehler zu beheben, besteht darin, die NaN-Werte zu verarbeiten, bevor versucht wird, die Spalte von einer Gleitkommazahl in eine Ganzzahl umzuwandeln.
Wir können den folgenden Code verwenden, um zunächst Zeilen zu identifizieren, die NaN-Werte enthalten:
#print rows in DataFrame that contain NaN in 'rebounds' column print (df[df[' rebounds ']. isnull ()]) points assists rebounds 1 12 7 NaN 5 23 9 NaN
Wir können dann entweder die Zeilen mit NaN-Werten entfernen oder die NaN-Werte durch einen anderen Wert ersetzen, bevor wir die Spalte von einer Gleitkommazahl in eine Ganzzahl konvertieren:
Methode 1: Zeilen mit NaN-Werten entfernen
#drop all rows with NaN values df = df. dropna () #convert 'rebounds' column from float to integer df[' rebounds '] = df[' rebounds ']. astype (int) #view updated DataFrame df points assists rebounds 0 25 5 11 2 15 7 10 3 14 9 6 4 19 12 5 6 25 9 9 7 29 4 12 #view class of 'rebounds' column df[' rebounds ']. dtype dtype('int64')
Methode 2: NaN-Werte ersetzen
#replace all NaN values with zeros df[' rebounds '] = df[' rebounds ']. fillna ( 0 ) #convert 'rebounds' column from float to integer df[' rebounds '] = df[' rebounds ']. astype (int) #view updated DataFrame df points assists rebounds 0 25 5 11 1 12 7 0 2 15 7 10 3 14 9 6 4 19 12 5 5 23 9 0 6 25 9 9 7 29 4 12 #view class of 'rebounds' column df[' rebounds ']. dtype dtype('int64')
Beachten Sie, dass wir mit beiden Methoden den ValueError vermeiden und die Float-Spalte erfolgreich in eine Integer-Spalte konvertieren können.
Zusätzliche Ressourcen
Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in Python beheben:
Lösung: Spalten überschneiden sich, es ist jedoch kein Suffix angegeben
Problembehebung: Das Objekt „numpy.ndarray“ verfügt nicht über das Attribut „append“.
Lösung: Wenn Sie alle Skalarwerte verwenden, müssen Sie einen Index übergeben