Nasıl düzeltilir? valueerror: float nan int'ye dönüştürülemiyor


Pandaları kullanırken karşılaşabileceğiniz bir hata:

 ValueError : cannot convert float NaN to integer

Bu hata, pandas DataFrame’deki bir sütunu kayan değerden tam sayıya dönüştürmeye çalıştığınızda, sütun NaN değerleri içerdiğinde ortaya çıkar.

Aşağıdaki örnekte bu hatanın pratikte nasıl düzeltileceği gösterilmektedir.

Hata nasıl yeniden oluşturulur?

Aşağıdaki pandaları DataFrame oluşturduğumuzu varsayalım:

 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

Şu anda “geri dönenler” sütunu “float” veri türündedir.

 #print data type of 'rebounds' column
df[' rebounds ']. dtype

dtype('float64')

“Hemen dönenler” sütununu kayan değerden tam sayıya dönüştürmeye çalıştığımızı varsayalım:

 #attempt to convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int)

ValueError : cannot convert float NaN to integer 

“Bounces” sütunundaki NaN değerleri tam sayı değerlerine dönüştürülemediği için ValueError alıyoruz.

Hata nasıl düzeltilir?

Bu hatayı düzeltmenin yolu, sütunu kayan noktalı durumdan tam sayıya dönüştürmeye çalışmadan önce NaN değerlerini işlemektir.

Öncelikle NaN değerleri içeren satırları tanımlamak için aşağıdaki kodu kullanabiliriz:

 #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

Daha sonra, sütunu kayan noktalı durumdan tam sayıya dönüştürmeden önce NaN değerlerine sahip satırları kaldırabilir veya NaN değerlerini başka bir değerle değiştirebiliriz:

Yöntem 1: NaN değerlerine sahip satırları kaldırın

 #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')

Yöntem 2: NaN Değerlerini Değiştirin

 #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')

Her iki yöntemin de ValueError’dan kaçınmamıza ve kayan noktalı sütunu başarıyla bir tamsayı sütununa dönüştürmemize olanak sağladığını unutmayın.

Ek kaynaklar

Aşağıdaki eğitimlerde Python’daki diğer yaygın hataların nasıl düzeltileceği açıklanmaktadır:

Nasıl düzeltilir? Sütunlar çakışıyor ancak son ek belirtilmemiş
Nasıl düzeltilir: ‘numpy.ndarray’ nesnesinin ‘append’ özelliği yok
Nasıl düzeltilir? Tüm skaler değerleri kullanıyorsanız bir dizin iletmeniz gerekir

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir