Как исправить: valueerror: невозможно преобразовать число с плавающей запятой nan в int.
Ошибка, с которой вы можете столкнуться при использовании панд:
ValueError : cannot convert float NaN to integer
Эта ошибка возникает при попытке преобразовать столбец в DataFrame pandas из числа с плавающей запятой в целое число, если столбец содержит значения NaN.
В следующем примере показано, как исправить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, мы создаем следующий DataFrame pandas:
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
В настоящее время столбец «отказов» имеет тип данных «float».
#print data type of 'rebounds' column df[' rebounds ']. dtype dtype('float64')
Предположим, мы пытаемся преобразовать столбец «отскоков» из числа с плавающей запятой в целое число:
#attempt to convert 'rebounds' column from float to integer df[' rebounds '] = df[' rebounds ']. astype (int) ValueError : cannot convert float NaN to integer
Мы получаем ValueError , поскольку значения NaN в столбце «отскоки» не могут быть преобразованы в целочисленные значения.
Как исправить ошибку
Способ исправить эту ошибку — обработать значения NaN перед попыткой преобразования столбца из числа с плавающей запятой в целое число.
Мы можем использовать следующий код, чтобы сначала идентифицировать строки, содержащие значения 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
Затем мы можем либо удалить строки со значениями NaN, либо заменить значения NaN другим значением перед преобразованием столбца из числа с плавающей запятой в целое число:
Способ 1: удалить строки со значениями 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')
Способ 2: замена значений 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')
Обратите внимание, что оба метода позволяют нам избежать ошибки ValueError и успешно преобразовать столбец с плавающей запятой в целочисленный столбец.
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:
Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «append»
Как исправить: если вы используете все скалярные значения, вам необходимо передать индекс.