Ein Fehler, auf den Sie bei der Verwendung von Pandas stoßen können, ist:

ValueError: cannot convert float NaN to integer

Dieser Fehler tritt auf, wenn Sie versuchen, eine Spalte in einem Pandas DataFrame von einem Gleitkommawert in eine ganze Zahl zu konvertieren, die Spalte jedoch 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

#Dataframe erstellen
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
                   'assists': [5, 7, 7, 9, 12, 9, 9, 4],
                   'rebounds': [11, np.nan, 10, 6, 5, np.nan, 9, 12]})

#Dataframe anzeigen
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 „Rebounds“ vom Datentyp „Float“.

#Datentyp der Spalte „Rebounds“ drucken
df['rebounds'].dtype

dtype('float64')

Angenommen, wir versuchen, die Spalte „Rebounds“ von einem Gleitkommawert in eine Ganzzahl umzuwandeln:

# Versuch, die Spalte „Rebounds“ von Float in Integer umzuwandeln
df['rebounds'] = df['rebounds'].astype(int)

ValueError: cannot convert float NaN to integer 

Wir erhalten einen ValueError, da die NaN-Werte in der Spalte „Rebounds“ nicht in Ganzzahlwerte konvertiert werden können.

So beheben Sie den Fehler

Die Möglichkeit, diesen Fehler zu beheben, besteht darin, sich mit den NaN-Werten zu befassen, bevor versucht wird, die Spalte von einem Gleitkommawert in eine Ganzzahl umzuwandeln.

Wir können den folgenden Code verwenden, um zunächst die Zeilen zu identifizieren, die NaN-Werte enthalten:

# Zeilen in DataFrame drucken, die NaN in der Spalte „Rebounds“ enthalten
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 löschen oder die NaN-Werte durch einen anderen Wert ersetzen, bevor wir die Spalte von einem Gleitkommawert in eine Ganzzahl konvertieren:

Methode 1: Zeilen mit NaN-Werten löschen

#alle Zeilen mit NaN-Werten löschen
df = df.dropna()

#Spalte „Rebounds“ von Float in Integer umwandeln
df['rebounds'] = df['rebounds'].astype(int) 

#aktualisierten DataFrame anzeigen
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

#Klasse der Spalte „Rebounds“ anzeigen
df['rebounds'].dtype

dtype('int64')

Methode 2: NaN-Werte ersetzen

#ersetze alle NaN-Werte durch Nullen
df['rebounds'] = df['rebounds'].fillna(0)

#Spalte „Rebounds“ von Float in Integer umwandeln
df['rebounds'] = df['rebounds'].astype(int) 

#aktualisierten DataFrame anzeigen
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


#Klasse der Spalte „Rebounds“ anzeigen
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:

Problembehebung: Spalten überlappen, aber es wurde kein Suffix angegeben
Problembehebung: Das Objekt „numpy.ndarray“ hat kein Attribut „append“
Lösung: Wenn Sie alle Skalarwerte verwenden, müssen Sie einen Index übergeben

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: