Pandas - isnull

isnull() Fonksiyonu

Veri çerçevesinde boş, eksik, kayıp veri (excel tablosundaki boş hücre gibi düşünebiliriz) olup olmadığını isnull() fonksiyonu ile tespit edebiliriz. isnull ifadesini, boş mu?, geçersiz mi?, kayıp/eksik mi? sorusu olarak düşünebilirsiniz. Bu fonksiyonu çalıştırdığımızda veri çerçevesinin satır ve sütun başlıkları ekrana yazdırılır ancak veri yerine True ya da False bilgisi görüntülenir.

Öncelikle Pandas Kütüphanesini içe aktarıp, kodlama esnasında hızlı olması adına bu kütüphaneye pd adını atayalım;

import pandas as pd

Basit bir Veri Çerçevesi (Data Frame) oluşturalım ve oluşturduğumuz Veri Çerçevesinin içeriğini görelim;

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"]}

veri = pd.DataFrame(sozluk)
print(veri)
isim yaş iş-meslek
0 Mustafa 25 mühendis
1 Halil 38 programcı
2 Burak 41 akademisyen
3 Emre 23 yönetici
4 Ersin 37 amir
5 Sertaç 52 mühendis
6 Furkan 30 yönetici
7 Murat 23 müdür
8 Ahmet 40 veteriner
9 Abdülkadir 38 yönetici

isnull() Fonksiyonunun Kullanımı

isnull() fonksiyonu aşağıdaki şekilde kullanılır.

print(veri.isnull())
isim yaş iş-meslek
0 False False False
1 False False False
2 False False False
3 False False False
4 False False False
5 False False False
6 False False False
7 False False False
8 False False False
9 False False False

any() Fonksiyonu

isnull() fonksiyonuna any() Fonksiyonunu da eklersek, veri çerçevesi tümüyle görüntülenmez sadece veri çerçevesi başlıkları ve bu başlıklarda (sütunlarda) eksik/kayıp veri bulunup bulunmadığı bilgisi görüntülenir.

print(veri.isnull().any())
isim         False
yaş          False
-meslek    False
dtype: bool

Görüyoruz ki, veri çerçevemizde hiç eksik/kayıp veri bulunmamaktadır. Yukarıdaki sözlük yapısında bazı verileri boş bırakarak yeni bir veri çerçevesi oluşturalım ve isnull() fonksiyonunu çalıştırıp sonuçları inceleyelim.

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

1 nolu İndeksteki isim, 3 nolu ve 9 nolu İndekslerdeki yaş bilgilerin boş olduğunu görüyoruz.

print(veri_2.isnull())
isim yaş iş-meslek
0 False False False
1 True False False
2 False False False
3 False True False
4 False False False
5 False False False
6 False False False
7 False False False
8 False False False
9 False True False

1 nolu İndeksteki isim, 3 nolu ve 9 nolu İndekslerdeki yaş bilgileri eksik olduğu için bu değerler True, diğer hücrelerde ise eksik veri olmadığı için False değeri ile gösterilmektedir.
Sütun bazlı eksik/kayıp veri olup olmadığını incelersek;

print(veri_2.isnull().any())
isim          True
yaş           True
-meslek    False
dtype: bool

Çıktıdan anlıyoruz ki;

Bir bakşa örneği daha inceleyelim, IMDB listemizde eksik veri var mı? varsa hangi sütunda ne kadar eksik veri var?

imdb = pd.read_excel("Veri_Setleri/imdb.xlsx")
print(imdb.isnull())
Film_Adı Yıl Puan Oylayan_Kişi
0 False False False False
1 False False False False
2 False False False False
3 False False False False
4 False False False False
... ... ... ... ...
242 False False False False
243 False False False False
244 False False False False
245 False False False False
246 False False False False

247 rows × 4 columns

Görüldüğü üzere, bu fonksiyon, veri çerçevesindeki her hücreye, kayıp/eksik veri olup olmadığı verisini yazıyor. False Yanlış, yani Eksik/Kayıp veri YOK, True ise Doğru yan, Eksik/Kayıp veri VAR anlamına gelir.

sum() Fonksiyonu

Yukarıdaki imdb tablosuna tek tek bakmak yerine, tüm sütunlardaki eksik/kayıp verileri python'a saydırıp, sonucu görüntüleyebiliriz. Python'da aşina olduğumuz sum() fonksiyonu işimize yarayacaktır.

print(imdb.isnull().sum())
Film_Adı        0
Yıl             0
Puan            0
Oylayan_Kişi    0
dtype: int64

Gördüğümüz kadarıyla tüm sonuçlar sıfır, yani veri çerçevemizde hiç eksik/kayıp veri bulunmamaktadır.

İçerisinde Kayıp/Eksik veri olan bir Calc tablosunu, veri çerçevesine dönüştürerek inceleyelim.

veri = pd.read_excel("Veri_Setleri/eksik_veri.ods")
print(veri)
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 NaN
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 NaN 8,7 161969.0
14 Inception 2010.0 8,7 844938.0
15 Star Wars 1977.0 8,7 NaN
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

isnull().sum() metodlarıyla, yeni veri çerçevemizdeki eksik verilerin bilgilerini görelim

print(veri.isnull().sum())
Film_Adı        0
Yıl             1
Puan            0
Oylayan_Kişi    2
dtype: int64

Yıl sütununda 1, Oylayan_Kişi sütununda 2 adet eksik veri olduğu görünüyor.