"/>

Pandas, Missing Values, NaN

Kategori: Python , 12 Eylül 2019 , JanFranco


Verisetimizde eksik veriler olabilir. Eksik veriler NaN yani "Not a Number" olarak ifade edilir. Bu yazımda eksik veriler ile ilgili işlemler yapacağız.
Eksik verilere iki şekilde yaklaşabiliriz: Silmek ve doldurmak. Silme işlemi kolaydır, eksik verilerin olduğu satırı direk sileriz. Doldurma işleminde ise bir değer verebiliriz, değeri verisetine göre verebiliriz, sütunun ortalaması, satırın ortalaması gibi. Kütüphaneleri import ederek başlayalım:


import numpy as np
import pandas as pd
Eksik verilerin olduğu bir veri kümesi oluşturalım:


arr = np.array([[10, 20, np.nan], [5, np.nan, np.nan], [15, np.nan, 12]])
df = pd.DataFrame(data=arr, index=["index1", "index2", "index3"], columns=["Column1", "Column2", "Column3"])
print(df)
>>
        Column1  Column2  Column3
index1     10.0     20.0      NaN
index2      5.0      NaN      NaN
index3     15.0      NaN     12.0
dropna() methodu ile eksik verileri silebilir, fillna() methodu ile eksik verileri doldurabiliriz:


print(df.dropna())
>>
Empty DataFrame

print(df.dropna(axis=1))
>>
Columns: [Column1, Column2, Column3]
Index: []
        Column1
index1     10.0
index2      5.0
index3     15.0

print(df.dropna(thresh=2))
>>
        Column1  Column2  Column3
index1     10.0     20.0      NaN
index3     15.0      NaN     12.0

print(df.fillna(value=1))
>>
        Column1  Column2  Column3
index1     10.0     20.0      1.0
index2      5.0      1.0      1.0
index3     15.0      1.0     12.0
İlk satırda satır bazlı eksik veri silme işlemi yaptığımız için ve tüm satırlarda da eksik veri bulunduğu için tüm veri kümesi silinmiş oldu. İkinci satırda axis parametresinin değerini 1 belirleyerek satır bazlı değil, sütun bazlı eksik veri silme işlemi yaptık. Üçüncü satırda thresh parametresini 2 belirleyerek, bir koşul verdik. Eksik verilerin olduğu satırda, normal veriler 2 veya daha fazla ise satır kalabilir, diğerlerini sil dedik. Son satırda ise fillna() methodu ile eksik verilerin değerini 1 olarak belirledik.
sum() methodu ile değerleri toplayabiliriz:


print(df.sum())
print(df.sum().sum())
>>
Column1    30.0
Column2    20.0
Column3    12.0
dtype: float64

62.0
Methodu ilk çağırdığımzıda sütun sütun gösterdi. Bu değerler için tekrar sum() methodunu çağırdığımızda sütunları da topladı.
size değeri ile toplam veri miktarını görebiliriz. isnull() methodu ile bir verinin eksik olup olmadığını kontrol edebiliriz:


print(df.size)
print(df.isnull().sum())
print(df.isnull().sum().sum())
>>
9

Column1    0
Column2    2
Column3    2
dtype: int64

4
İlk satırda 9 sonucunu elde ettik. En yukarı bakarsak 9 veri gönderdiğimizi görebiliriz. isnull() methodunu sum() methodu ile birlikte kullandık ve sütun sütun kaç kayıp veri olduğunu gördük. Tekrar sum() methodunu çalıştırdığımızda tüm verisetindeki toplam kayıp veri miktarını bulmuş olduk.
Veri kümemiz ile baya bir oynadık. Veri kümesini baştan tanımlayalım ve eksik verileri, tüm verilerin ortalamasını alarak bulalım, bir fonksiyon kullanalım:


arr = np.array([[10, 20, np.nan], [5, np.nan, np.nan], [15, np.nan, 12]])
df = pd.DataFrame(data=arr, index=["index1", "index2", "index3"], columns=["Column1", "Column2", "Column3"])
print(df)


def calculate_mean(data_frame):
    total = data_frame.sum().sum()
    values = data_frame.size - data_frame.isnull().sum()
    return total / values


df = df.fillna(calculate_mean(df))
print(df)
>>
        Column1    Column2    Column3
index1     10.0  20.000000   8.857143
index2      5.0   8.857143   8.857143
index3     15.0   8.857143  12.000000


Sonraki Yazı: Pandas, Importing and Exporting Data
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın