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