Як виправити: valueerror: неможливо перетворити float nan на int


Помилка, з якою ви можете зіткнутися під час використання панд:

 ValueError : cannot convert float NaN to integer

Ця помилка виникає, коли ви намагаєтеся перетворити стовпець у pandas DataFrame з числа з плаваючою речовиною на ціле число, коли стовпець містить значення NaN.

У наступному прикладі показано, як виправити цю помилку на практиці.

Як відтворити помилку

Припустімо, що ми створюємо такі панди DataFrame:

 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» не має атрибута «додавання».
Як виправити: якщо ви використовуєте всі скалярні значення, вам потрібно передати індекс

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *