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