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