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

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *