Pandas - unique ve nunique

unique() ve nunique() Fonksiyonları

unique() Fonksiyonu

unique() Fonksiyonu, Veri Çerçevesinden benzersiz değerler tespit etmek, kategorik verileri analiz etmek veya yinelenen verileri tanımlamak için kullanılır.

unique() Fonksiyonunun Kullanımı

unique() Fonksiyonu bir NumPy dizisi döndürür. Bir sütundaki benzersiz (farklı) değerleri tanımlamak için kullanışlıdır ve bu, kategorik verilerle çalışırken veya benzersiz değerleri algılarken yardımcı olabilir. Benzersiz değerlerin sırası, ilk oluşumlarına göre korunur.

Sözdizimi:

Veri_Çerçevesi_Adı["Sütun_Adı"].unique()

Konuyu örnek veri çerçevesi oluşturarak inceleyelim. Veri çerçevemiz aşağıdadır;

import pandas as pd

data = {
    'A': ['A1', 'A2', 'A3', 'A4', 'A5'],
    'B': ['B1', 'B2', 'B3', 'B4', 'B4'],
    'C': ['C1', 'C2', 'C3', 'C3', 'C3'],
    'D': ['D1', 'D2', 'D2', 'D2', 'D2'],
    'E': ['E1', 'E1', 'E1', 'E1', 'E1']}

df = pd.DataFrame(data)
print("Pandas Veri Çerçevesi:")
print(df)

Pandas Veri Çerçevesi:

A B C D E
0 A1 B1 C1 D1 E1
1 A2 B2 C2 D2 E1
2 A3 B3 C3 D2 E1
3 A4 B4 C3 D2 E1
4 A5 B4 C3 D2 E1

unique() Fonksiyonunu kullanarak "B" sütunundan benzersiz değerleri alıyor ve ekrana yazdırıyoruz.

benzersiz_degerler = df['B'].unique()

print("B Sütunundaki Benzersiz değerler:")
print(benzersiz_degerler)

Çıktı:

B Sütunundaki Benzersiz değerler:
['B1' 'B2' 'B3' 'B4']

Bir de "D" Sütunundaki benzersiz değerleri görelim.

benzersiz_degerler = df['D'].unique()

print("D Sütunundaki Benzersiz değerler:")
print(benzersiz_degerler)

Çıktı:

D Sütunundaki Benzersiz değerler:
['D1' 'D2']

nunique() Fonksiyonu

Benzersiz değerlerin miktarını (kaç adet olduğunu) bulmak için nunique() Fonksiyonunu kullanabiliriz.

nunique: Number of Unique yani Benzersiz Sayısı ifadesini temsil etmektedir.

nunique() Fonksiyonunun Kullanımı

Sözdizimi:

Veri_Çerçevesi_Adı.nunique(axis=0, dropna=True)

# Aşağıdaki şekilde Sütun ismi belirterek te kullanılabilir;
Veri_Çerçevesi_Adı["Sütun_Adı"].nunique(axis=0, dropna=True)

Parametreler

axis

axis parametresinin alabileceği değer:

Varsayılan değer 0'dır. Yani Sütun bazında benzersiz değerleri listeler.

dropna

Bu parametre sayesinde NaN (eksik, kayıp, boş, geçersiz) değerlerin sayıma dahil edilip edilmeyeceği belirlenir. dropna bool yani mantıksal değer alır. Parametrenin alabileceği değer:

Varsayılan değer True'dur. Truedeğeri ile Eksik / Kayıp veri dikkate alınmaz, yok sayılır. False değeri ise eksik/kayıp veriyi de benzersiz bir veri olarak görür, hesaba dahil eder.

Yukarıdaki veri çerçevesinin her bir sütunundaki benzersiz değerlerin miktarını tespit etmek için nunique() Fonksiyonunu kullanalım.

# "A" Sütunundaki benzersiz verileri tespit edelim
benzersiz_degerler_A = df['A'].nunique()
# Print the number of unique values
print("'A' Sütunundaki benzersiz veri sayısı:", benzersiz_degerler_A)

# "B" Sütunundaki benzersiz verileri tespit edelim
benzersiz_degerler_B = df['B'].nunique()
# Print the number of unique values
print("'B' Sütunundaki benzersiz veri sayısı:", benzersiz_degerler_B)

# "C" Sütunundaki benzersiz verileri tespit edelim
benzersiz_degerler_C = df['C'].nunique()
# Print the number of unique values
print("'C' Sütunundaki benzersiz veri sayısı:", benzersiz_degerler_C)

# "D" Sütunundaki benzersiz verileri tespit edelim
benzersiz_degerler_D = df['D'].nunique()
# Print the number of unique values
print("'D' Sütunundaki benzersiz veri sayısı:", benzersiz_degerler_D)

# "E" Sütunundaki benzersiz verileri tespit edelim
benzersiz_degerler_E = df['E'].nunique()
# Print the number of unique values
print("'E' Sütunundaki benzersiz veri sayısı:", benzersiz_degerler_E)

Çıktı:

'A' Sütunundaki benzersiz veri sayısı: 5
'B' Sütunundaki benzersiz veri sayısı: 4
'C' Sütunundaki benzersiz veri sayısı: 3
'D' Sütunundaki benzersiz veri sayısı: 2
'E' Sütunundaki benzersiz veri sayısı: 1

Kodu daha kısa yazarak ta tüm sütunlardaki benzersiz değerleri tek seferde elde edebiliriz;

print(df.nunique())

Çıktı:

A    5
B    4
C    3
D    2
E    1
dtype: int64

Parametreler

axis Parametresi

axis parametresi ile, satır ve sütunlardaki benzersiz değerleri tespit edelim. axis = 0 ile sütunlardaki benzersiz verileri bulalım;

print(df.nunique(axis = 0))    # Bu ifade print(df.nunique()) ile aynıdır.

Çıktı:

A    5
B    4
C    3
D    2
E    1
dtype: int64

axis = 1 ile satırlardaki benzersiz verileri bulalım;

df.nunique(axis = 1)

Çıktı:

0    5
1    5
2    5
3    5
4    5
dtype: int64

İndex değerlerini değiştirip satırlardaki benzersiz değerleri tekrar bulmaya çalışalım;

yeni_index = ["satir_1","satir_2","satir_3","satir_4","satir_5"]
df.index = yeni_index
print(df)
A B C D E
satir_1 A1 B1 C1 D1 E1
satir_2 A2 B2 C2 D2 E1
satir_3 A3 B3 C3 D2 E1
satir_4 A4 B4 C3 D2 E1
satir_5 A5 B4 C3 D2 E
print(df.nunique(axis = 1))

Çıktı:

satir_1    5
satir_2    5
satir_3    5
satir_4    5
satir_5    5
dtype: int64

dropna Parametresi

Sıra geldi dropna Parametresini incelemeye. B sütunu ve satir_4 isimli satırın kesişimindeki değeri pd.NA olarak değiştirelim.

df.iloc[3,1] = pd.NA
print(df)
A B C D E
satir_1 A1 B1 C1 D1 E1
satir_2 A2 B2 C2 D2 E1
satir_3 A3 B3 C3 D2 E1
satir_4 A4 C3 D2 E1
satir_5 A5 B4 C3 D2 E1

Artık Veri çerçevemizde bir eksik verimiz bulunuyor. nunique() fonksiyonunu parametresiz ya da axis = 0 parametresi ile çalıştırıp sonuca bakalım.

print(df.nunique(axis = 0))    # print(df.nunique()) ile aynıdır.

Çıktı:

A    5
B    4
C    3
D    2
E    1
dtype: int64

B Sütununda 4 adet benzersiz değer tespit edildi. Şimdi bir de dropna=True değeri ile sonucu inceleyelim;

Çıktı:

A    5
B    4
C    3
D    2
E    1
dtype: int64

Yukarıdaki ile aynı sonucu elde ettik yani dropna parametresi Varsayılan olarak True değeri ile Eksik / Kayıp veriyi dikkate almadı.

Peki dropna parametresi False değeri alırsa, benzersiz değerler hesaplanırken Eksik / Kayıp veriyi dikkate alınacak mı? İnceleyelim.

df.nunique(dropna=False)    # eksik verileri görmezden gelme, say.

Çıktı:

A    5
B    5
C    3
D    2
E    1
dtype: int64

Çıktıya bakınca görüyoruz ki, eksik / kayıp veri de bir değer olarak kabul edilmiş. B sütununda toplam 5 adet benzersiz değer hesaplanmış.

E Sütununa ait satir_4 isimli satırındaki değeri de silelim.

df.iloc[3,4] = pd.NA
print(df)
A B C D E
satir_1 A1 B1 C1 D1 E1
satir_2 A2 B2 C2 D2 E1
satir_3 A3 B3 C3 D2 E1
satir_4 A4 C3 D2
satir_5 A5 B4 C3 D2 E1

E sütununda kaç adet benzersiz değer varmış görelim;

df.E.nunique(dropna=False)

Çıktı:

2

Peki satir_4 isimli satırda kaç adet benzersiz veri var dersiniz?

print(df.nunique(axis=1, dropna=True))

Çıktı:

satir_1    5
satir_2    5
satir_3    5
satir_4    3
satir_5    5
dtype: int64

Sonuç 3 olarak görünüyor. Peki Eksik / kayıp verileri de hesaba dahil edersek sonuç ne olur? görelim;

print(df.nunique(axis=1, dropna=False))

Çıktı:

satir_1    5
satir_2    5
satir_3    5
satir_4    4
satir_5    5
dtype: int64

Eksik / kayıp verileri de hesaba dahil edince satir_4 isimli satırda toplam 4 adet benzersiz değer olduğu tespit edilmiş oldu.

Ek Bilgi

unique () Fonksiyonuna ek olarak, bir Pandas veri çerçevesinden benzersiz değerleri almanın başka yolları da vardır:

set() Fonksiyonu

Python öğrenirken veri tipleri konusunda karşılaştığımız gömülü fonksiyonlardan biri olan set() (küme) fonksiyonunu, Veri çerçevelerindeki benzersiz verileri tespit etmek için kullanabiliriz.

set() Fonksiyonunu Hatırlayalım

set() fonksiyonunun görevi farklı veri tiplerini kümeye (küme yapısına) dönüştürmektir. Küme yapısı, matematikte gördüğümüz kümelerde olduğu gibi, bir elemandan sadece bir tane barındırmaya izin verir.

Yukarıdaki Veri çerçevesinin 'C' Sütunundaki benzersiz veri sayısını set() fonksiyonu yardımı ile tespit edelim.

print(set(df["C"]))    # print(set(df.C)) şeklinde de kullanılabilir.

Çıktı:

{'C3', 'C2', 'C1'}

Görüldüğü üzere çıktı Küme yani set veri tipinde.

Kümeler sözlükler gibi sıralı veri tipi değildir. Bu yüzden indexleme desteklemez. Kümeler tek başına gereksiz görünse de birden fazla küme olduğu zaman çokça ihtiyacınız olacak ve o zaman kümelerin ne kadar gerekli olduğunu göreceksiniz.

Kaynak: