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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert