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