Одна ошибка, с которой вы можете столкнуться при использовании pandas:
ValueError : cannot convert float NaN to integer
Эта ошибка возникает, когда вы пытаетесь преобразовать столбец в кадре данных pandas из числа с плавающей запятой в целое число, но столбец содержит значения NaN.
В следующем примере показано, как исправить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, мы создаем следующие Pandas DataFrame:
import pandas as pd
import numpy as np
#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
'assists': [5, 7, 7, 9, 12, 9, 9, 4],
'rebounds': [11, np.nan , 10, 6, 5, np.nan , 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
В настоящее время столбец «отскоки» имеет тип данных «плавающий».
#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» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс