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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *