Jak naprawić: valueerror: nie można przekonwertować float nan na int


Błąd, który możesz napotkać podczas korzystania z pand, to:

 ValueError : cannot convert float NaN to integer

Ten błąd występuje podczas próby przekonwertowania kolumny w ramce danych pandy z liczby zmiennoprzecinkowej na liczbę całkowitą, gdy kolumna zawiera wartości NaN.

Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.

Jak odtworzyć błąd

Załóżmy, że tworzymy następującą ramkę danych pandy:

 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

Obecnie kolumna „odbicia” ma typ danych „float”.

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

dtype('float64')

Załóżmy, że próbujemy przekonwertować kolumnę „odbicia” z liczby zmiennoprzecinkowej na liczbę całkowitą:

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

ValueError : cannot convert float NaN to integer 

Otrzymujemy ValueError , ponieważ wartości NaN w kolumnie „odbicia” nie mogą zostać przekonwertowane na wartości całkowite.

Jak naprawić błąd

Sposobem na naprawienie tego błędu jest obsługa wartości NaN przed próbą konwersji kolumny z liczby zmiennoprzecinkowej na liczbę całkowitą.

Możemy użyć następującego kodu, aby najpierw zidentyfikować wiersze zawierające wartości 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

Możemy wtedy albo usunąć wiersze z wartościami NaN, albo zastąpić wartości NaN inną wartością przed konwersją kolumny z liczby zmiennoprzecinkowej na liczbę całkowitą:

Metoda 1: Usuń wiersze z wartościami 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')

Metoda 2: Zamień wartości 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')

Należy zauważyć, że obie metody pozwalają nam uniknąć błędu ValueError i pomyślnie przekonwertować kolumnę zmiennoprzecinkową na kolumnę całkowitą.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:

Jak naprawić: Kolumny nakładają się, ale nie określono żadnego sufiksu
Jak naprawić: Obiekt „numpy.ndarray” nie ma atrybutu „dołącz”.
Jak naprawić: jeśli używasz wszystkich wartości skalarnych, musisz przekazać indeks

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *