Cara memperbaiki: valueerror: tidak dapat mengubah float nan menjadi int
Kesalahan yang mungkin Anda temui saat menggunakan pandas adalah:
ValueError : cannot convert float NaN to integer
Kesalahan ini terjadi saat Anda mencoba mengonversi kolom di pandas DataFrame dari float menjadi bilangan bulat, saat kolom berisi nilai NaN.
Contoh berikut menunjukkan cara memperbaiki kesalahan ini dalam praktiknya.
Bagaimana cara mereproduksi kesalahan tersebut
Misalkan kita membuat DataFrame panda berikut:
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
Saat ini, kolom “pentalan” bertipe data “float”.
#print data type of 'rebounds' column df[' rebounds ']. dtype dtype('float64')
Misalkan kita mencoba mengubah kolom “pantulan” dari float menjadi integer:
#attempt to convert 'rebounds' column from float to integer df[' rebounds '] = df[' rebounds ']. astype (int) ValueError : cannot convert float NaN to integer
Kami menerima ValueError karena nilai NaN di kolom “bouncing” tidak dapat dikonversi ke nilai integer.
Bagaimana cara memperbaiki kesalahan tersebut
Cara untuk memperbaiki kesalahan ini adalah dengan menangani nilai NaN sebelum mencoba mengubah kolom dari float menjadi integer.
Kita dapat menggunakan kode berikut untuk terlebih dahulu mengidentifikasi baris yang berisi nilai 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
Kita kemudian dapat menghapus baris dengan nilai NaN atau mengganti nilai NaN dengan nilai lain sebelum mengubah kolom dari float menjadi integer:
Metode 1: Hapus baris dengan nilai 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')
Metode 2: Ganti Nilai 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')
Perhatikan bahwa kedua metode memungkinkan kita menghindari ValueError dan berhasil mengonversi kolom float menjadi kolom integer.
Sumber daya tambahan
Tutorial berikut menjelaskan cara memperbaiki kesalahan umum lainnya dengan Python:
Cara Memperbaiki: Kolom tumpang tindih tetapi tidak ada akhiran yang ditentukan
Cara Memperbaiki: Objek ‘numpy.ndarray’ tidak memiliki atribut ‘append’
Cara memperbaiki: Jika Anda menggunakan semua nilai skalar, Anda harus meneruskan indeks