Pandas - fillna

fillna() Fonksiyonu

Veri Çerçevelerimizde eksik veri bulunması durumunda, her zaman satır ve sütunları silmeye çalışmayız. Bazen eksik verilerin yerine, yeni değer atamamız gerekebilir. Örneğin matematiksel işlemlerde, Pandas ile satır ya da sütunların ortalama değerlerini hesaplatıp, eksik verilerin yerine ( eksik veriyi, Excel programındaki boş hüçreler gibi düşünülebilir) yazdırabiliriz/atayabiliriz.

DataFrame.fillna(value=None,
                method=None, 
                axis=None, 
                inplace=False, 
                limit=None, 
                downcast=<no_default>)

value Parametresi

value parametresi, Eksik verilerin yerine istersek yazdırmak istediğimiz değerin belirtildiği kısımdır. value parametresine sayısal değer yazacağımız zaman doğrudan değerin kendisini, metinsel (string) ifadeler de yazacağımız zaman ise tırnak işareti " kullanmamız gerektiğini unutmamalıyız. Şimdiki örnekte, Veri çerçevemizdeki eksik verilerin yerine Mustafa Halil ismini yazdıracağım.

print(veri.fillna(value = "Mustafa Halil"))
Film_Adı Yıl Puan Oylayan_Kişi
0 The Shawshank Redemption 1994.0 9,2 1071904.0
1 The Godfather 1972.0 9,2 751381.0
2 The Godfather: Part II 1974.0 9 488889.0
3 Pulp Fiction 1994.0 8,9 830504.0
4 The Dark Knight 2008.0 8,9 1045186.0
5 12 Angry Men 1957.0 8,9 Mustafa Halil
6 Schindler's List 1993.0 8,9 545703.0
7 The Lord of the Rings: The Return of the King 2003.0 8,8 758388.0
8 Fight Club 1999.0 8,8 814389.0
9 Star Wars: Episode V - The Empire Strikes Back 1980.0 8,8 519895.0
10 The Lord of the Rings: The Fellowship of the R... 2001.0 8,8 784999.0
11 One Flew Over the Cuckoo's Nest 1975.0 8,7 447005.0
12 Goodfellas 1990.0 8,7 465445.0
13 Seven Samurai Mustafa Halil 8,7 161969.0
14 Inception 2010.0 8,7 844938.0
15 Star Wars 1977.0 8,7 Mustafa Halil
16 Forrest Gump 1994.0 8,7 711386.0
17 The Matrix 1999.0 8,7 770559.0
18 The Lord of the Rings: The Two Towers 2002.0 8,7 680983.0

Boş hücrelere yani eksik verilerin yerine, Yıl sütununun ortalama değerini (1885.0) atamak isteseydik (saçma bir atama işlemi olduğunun farkındayım :) ), aşağıdaki gibi kodlarımızı düzenlememiz gerekecekti.

ortalama = int(veri["Yıl"].sum()/19)
print(veri.fillna(value=ortalama))
Film_Adı Yıl Puan Oylayan_Kişi
0 The Shawshank Redemption 1994.0 9,2 1071904.0
1 The Godfather 1972.0 9,2 751381.0
2 The Godfather: Part II 1974.0 9 488889.0
3 Pulp Fiction 1994.0 8,9 830504.0
4 The Dark Knight 2008.0 8,9 1045186.0
5 12 Angry Men 1957.0 8,9 1885.0
6 Schindler's List 1993.0 8,9 545703.0
7 The Lord of the Rings: The Return of the King 2003.0 8,8 758388.0
8 Fight Club 1999.0 8,8 814389.0
9 Star Wars: Episode V - The Empire Strikes Back 1980.0 8,8 519895.0
10 The Lord of the Rings: The Fellowship of the R... 2001.0 8,8 784999.0
11 One Flew Over the Cuckoo's Nest 1975.0 8,7 447005.0
12 Goodfellas 1990.0 8,7 465445.0
13 Seven Samurai 1885.0 8,7 161969.0
14 Inception 2010.0 8,7 844938.0
15 Star Wars 1977.0 8,7 1885.0
16 Forrest Gump 1994.0 8,7 711386.0
17 The Matrix 1999.0 8,7 770559.0
18 The Lord of the Rings: The Two Towers 2002.0 8,7 680983.0

method Parametresi

Veri çerçevesinde değer girilmemiş hücreleri (boşlukları) doldurmak, başka bir ifadeyle, değer atamak için method parametresi kullanılabilir.

method parametresinin alabileceği değerler;

Öncelikle Veri çerçevesi oluşturup inceleyelim;

sozluk = {"isim" : ["Mustafa", "Halil", "Burak", "Emre", "Ersin", "Sertaç", "Furkan","Murat","Ahmet","Abdülkadir"],
                    "yaş" : [25, 38, 41, 23, 37, 52, 30, 23, 40, 38],
                   "iş-meslek" : ["mühendis", "programcı", "akademisyen", "yönetici","amir","mühendis", "yönetici","müdür","veteriner","yönetici"],
                     "kategori" : ["Kategori_1", None, "Kategori_3", "Kategori_4", "Kategori_5", None, None, "Kategori_8", "Kategori_9", None]}
veri = pd.DataFrame(sozluk)
veri
isim yaş iş-meslek kategori
0 Mustafa 25 mühendis Kategori_1
1 Halil 38 programcı None
2 Burak 41 akademisyen Kategori_3
3 Emre 23 yönetici Kategori_4
4 Ersin 37 amir Kategori_5
5 Sertaç 52 mühendis None
6 Furkan 30 yönetici None
7 Murat 23 müdür Kategori_8
8 Ahmet 40 veteriner Kategori_9
9 Abdülkadir 38 yönetici None

Veri çerçevesini incelediğimzde, Halil, Sertaç, Furkan ve Ahmet'in kategori bilgilerinin, geçerli değere sahip olmadığını görüyoruz. Bu değerleri method parametresinin seçeneklerini kullanarak doldurmaya çalışalım.

backfill ve bfill

Öncelikle backfill ve bfill seçeneklerini inceleyelim.

veri = veri.fillna(method="backfill")
print(veri)
isim yaş iş-meslek kategori
0 Mustafa 25 mühendis Kategori_1
1 Halil 38 programcı Kategori_3
2 Burak 41 akademisyen Kategori_3
3 Emre 23 yönetici Kategori_4
4 Ersin 37 amir Kategori_5
5 Sertaç 52 mühendis Kategori_8
6 Furkan 30 yönetici Kategori_8
7 Murat 23 müdür Kategori_8
8 Ahmet 40 veteriner Kategori_9
9 Abdülkadir 38 yönetici None
veri = veri.fillna(method="bfill")
print(veri)
isim yaş iş-meslek kategori
0 Mustafa 25 mühendis Kategori_1
1 Halil 38 programcı Kategori_3
2 Burak 41 akademisyen Kategori_3
3 Emre 23 yönetici Kategori_4
4 Ersin 37 amir Kategori_5
5 Sertaç 52 mühendis Kategori_8
6 Furkan 30 yönetici Kategori_8
7 Murat 23 müdür Kategori_8
8 Ahmet 40 veteriner Kategori_9
9 Abdülkadir 38 yönetici None

Görüldüğü üzere, backfill ve bfill seçenekleri sayesinde boş (geçersiz değere sahip) hücreler, kendinden sonraki (altında bulunan) son geçerli hücrenin değeri ile dolduruldu.

pad ve ffill

Şimdi pad ve ffill seçeneklerini inceleyelim;

veri = veri.fillna(method="pad")
print(veri)
isim yaş iş-meslek kategori
0 Mustafa 25 mühendis Kategori_1
1 Halil 38 programcı Kategori_1
2 Burak 41 akademisyen Kategori_3
3 Emre 23 yönetici Kategori_4
4 Ersin 37 amir Kategori_5
5 Sertaç 52 mühendis Kategori_5
6 Furkan 30 yönetici Kategori_5
7 Murat 23 müdür Kategori_8
8 Ahmet 40 veteriner Kategori_9
9 Abdülkadir 38 yönetici Kategori_9
veri = veri.fillna(method="ffill")
print(veri)
isim yaş iş-meslek kategori
0 Mustafa 25 mühendis Kategori_1
1 Halil 38 programcı Kategori_1
2 Burak 41 akademisyen Kategori_3
3 Emre 23 yönetici Kategori_4
4 Ersin 37 amir Kategori_5
5 Sertaç 52 mühendis Kategori_5
6 Furkan 30 yönetici Kategori_5
7 Murat 23 müdür Kategori_8
8 Ahmet 40 veteriner Kategori_9
9 Abdülkadir 38 yönetici Kategori_9

backfill ve bfill seçeneklerinin tersine pad ve ffill seçenekleri ile sayesinde ise boş (geçersiz değere sahip) hücreler, kendinden önceki (üstünde bulunan) son geçerli hücrenin değeri ile dolduruldu.