Как исправить: 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»
Как исправить: если вы используете все скалярные значения, вам необходимо передать индекс.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *