Come risolvere il problema: valueerror: impossibile convertire float nan in int
Un errore che potresti riscontrare quando usi i panda è:
ValueError : cannot convert float NaN to integer
Questo errore si verifica quando si tenta di convertire una colonna in un DataFrame Pandas da un float a un numero intero, quando la colonna contiene valori NaN.
L’esempio seguente mostra come correggere questo errore nella pratica.
Come riprodurre l’errore
Supponiamo di creare il seguente DataFrame panda:
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
Attualmente, la colonna “rimbalzi” è del tipo di dati “float”.
#print data type of 'rebounds' column df[' rebounds ']. dtype dtype('float64')
Supponiamo di provare a convertire la colonna “rimbalzi” da float a intero:
#attempt to convert 'rebounds' column from float to integer df[' rebounds '] = df[' rebounds ']. astype (int) ValueError : cannot convert float NaN to integer
Riceviamo un ValueError perché i valori NaN nella colonna “rimbalzi” non possono essere convertiti in valori interi.
Come correggere l’errore
Il modo per correggere questo errore è gestire i valori NaN prima di provare a convertire la colonna da float a intero.
Possiamo utilizzare il seguente codice per identificare innanzitutto le righe che contengono valori NaN:
#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
Possiamo quindi rimuovere le righe con valori NaN o sostituire i valori NaN con un altro valore prima di convertire la colonna da float a intero:
Metodo 1: rimuovere le righe con valori NaN
#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')
Metodo 2: sostituire i valori NaN
#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')
Tieni presente che entrambi i metodi ci consentono di evitare ValueError e convertire con successo la colonna float in una colonna intera.
Risorse addizionali
I seguenti tutorial spiegano come correggere altri errori comuni in Python:
Come risolvere il problema: le colonne si sovrappongono ma non è specificato alcun suffisso
Come risolvere il problema: l’oggetto “numpy.ndarray” non ha un attributo “append”.
Come risolvere il problema: se utilizzi tutti i valori scalari, devi passare un indice