Oplossing: valueerror: kan float nan niet naar int converteren


Een fout die u kunt tegenkomen bij het gebruik van panda’s is:

 ValueError : cannot convert float NaN to integer

Deze fout treedt op wanneer u probeert een kolom in een Panda DataFrame te converteren van een float naar een geheel getal, terwijl de kolom NaN-waarden bevat.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.

Hoe de fout te reproduceren

Stel dat we de volgende panda’s DataFrame maken:

 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

Momenteel is de kolom ‚bounces‘ van het gegevenstype ‚float‘.

 #print data type of 'rebounds' column
df[' rebounds ']. dtype

dtype('float64')

Stel dat we de kolom ‚bounces‘ proberen om te zetten van een float naar een geheel getal:

 #attempt to convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int)

ValueError : cannot convert float NaN to integer 

We ontvangen een ValueError omdat de NaN-waarden in de kolom „bounces“ niet kunnen worden omgezet naar gehele waarden.

Hoe u de fout kunt oplossen

De manier om deze fout op te lossen is door de NaN-waarden af te handelen voordat u probeert de kolom van een float naar een geheel getal te converteren.

We kunnen de volgende code gebruiken om eerst rijen te identificeren die NaN-waarden bevatten:

 #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

We kunnen dan de rijen met NaN-waarden verwijderen of de NaN-waarden vervangen door een andere waarde voordat we de kolom converteren van een float naar een geheel getal:

Methode 1: Rijen met NaN-waarden verwijderen

 #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: Vervang NaN-waarden

 #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')

Houd er rekening mee dat we met beide methoden de ValueError kunnen vermijden en de float-kolom met succes naar een kolom met gehele getallen kunnen converteren.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:

Oplossing: Kolommen overlappen elkaar, maar er is geen achtervoegsel opgegeven
Oplossing: Object ’numpy.ndarray‘ heeft geen ‚append‘-attribuut
Oplossing: als u alle scalaire waarden gebruikt, moet u een index doorgeven

Einen Kommentar hinzufügen

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