Pandas - loc

loc[] Fonksiyonu Nedir? Nasıl Kullanılır?

Etiketlere veya mantık (boole) dizisine göre bir satır ve sütun grubuna erişim

loc[] metodu, iloc[] metoduna benzer bir metottur ancak loc[] metodunda, satır ve sütun seçmek/görüntülemek istediğimiz zaman, satır ve sütunların isimlerini / ifadelerini (metinsel / string ifadelerini) yazmalıyız. loc[] metodu aslında etiket tabanlıdır, ancak bir mantık (boole) dizisiyle de kullanılabilir. loc[] metodunun alabileceği parametreler şunlardır:

UYARI:

loc[] metodu ile dilimleme işlemi yapılırken : karakterinin sağındaki bitiş değeri, standart python dilimleme işlemlerinin aksine, seçime DAHİL EDİLİR, unutmayın.

Elimizde aşağıdaki gibi bir veri çerçevesi olduğunu varsayalım.

imdb = pd.read_excel("Veri_Setleri/imdb.xlsx", index_col="Film_Adı")
print(imdb)
Film_Adı Yıl Puan Oylayan_Kişi
The Shawshank Redemption 1994 9,2 1071904
The Godfather 1972 9,2 751381
The Godfather: Part II 1974 9 488889
Pulp Fiction 1994 8,9 830504
The Dark Knight 2008 8,9 1045186
... ... ... ...
Mystic River 2003 7,9 256159
In the Heat of the Night 1967 7,9 37081
Arsenic and Old Lace 1944 7,9 45893
Before Sunrise 1995 7,9 100974
Papillon 1973 7,9 62517

247 rows × 3 columns

Pulp Fiction Filminin Puanını öğrenmek istediğimizi düşünelim. Bu durumda aşağıdaki kodları yazmamız doğru sonucu verecektir.

print(imdb.loc["Pulp Fiction", "Puan"])

Çıktı:

'8,9'

Star Wars isimli satır verisine ulaşmak için loc[] metoduna Star Wars metinsel (string) ibaresini eklemeliyiz.

print(imdb.loc["Star Wars"])

Çıktı:

Yıl               1977
Puan               8,7
Oylayan_Kişi    585132
Name: Star Wars, dtype: object

loc[] metodunda daha fazla pratik yapmak için df isminde bir veri çerçevesi oluşturalım;

df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])
print(df)
max_speed shield
cobra 1 2
viper 4 5
sidewinder 7 8

Tek etiket ile Satır Seçimi

loc[] metodunda tek etiket kullanıldığında, sonucun satırı bir Seri olarak döndürüldüğünü unutmayın. Örneğe bakalım;

print(df.loc['viper'])

Çıktı:

max_speed    4
shield       5
Name: viper, dtype: int64

Etiket listesi ile Satır Seçimi

Köşeli parantez [[]] kullanımı , sonuc olarak bir Veri Çerçevesi (DataFrame) döndürür. İnceleyelim;

print(df.loc[['viper', 'sidewinder']])
max_speed shield
viper 4 5
sidewinder 7 8

Satır ve sütun belirterek Değer Seçimi

Tıpkı iloc[] metodunda olduğu gibi loc[] metoduna da hem satır hem de sütun değeri girilebilir. Bu durumda MS Excel ve Libre Ofis Calc programında olduğu gibi satır ve sütunların kesişimindeki hücre ya da hücre değer(ler)i, sonuç olarak döndürülür.

Aşağıdaki örnekte, loc[] metoduna birer adet satır ve sütun değeri girilecek. Sonucu incelersek sadece bir değer döndürdüğünü göreceksiniz.

print(df.loc['cobra', 'shield'])

Çıktı:

2

Satır için aralıklı etiket, Sütun için ise tek etiketle dilimleme

Bu kısımda, satır seçiminde bir aralık, sütün seçiminde ise sadece tek bir değer (yani tek sütun) belirterek sonucun nasıl çıkacağını inceleyelim.

Yukarıdaki Uyarıda belirtildiği gibi, Pandas'ta dilimleme esnasında hem başlangıç hem de bitiş değerlerinin seçime dahil edildiğini unutmayın.

print(df.loc['cobra':'viper', 'max_speed'])

Çıktı:

cobra    1
viper    4
Name: max_speed, dtype: int64

Satır ile aynı uzunlukta Mantık (Boole) listesi ile Seçim

df isimli veri çerçevemiz 3 satırdan oluştuğu için, toplam 3 adet True ya da False anahtar kelimesi kullanarak bir mantık (boole) listesi oluşturacak ve True olarak belirttiğimiz satırları göreceğimiz bir sonuç elde edeceğiz.

print(df.loc[[False, False, True]])
max_speed shield
sidewinder 7 8

Hizalanabilir Mantık (boole) Serisi ile Satır Seçimi

Pandas Seriler (Series) veri yapısını kullanarak, oluşturmuş olduğumuz veri çerçevemizde indeks sırasını değiştirerek (hizalayarak) mantıksal (boole) listesi ile belirttiğimiz satırları filtreleyerek satır seçimi yapabiliriz. Anlatım biraz karışık gelmiş olabilir.

Aşağıdaki örneği incelerken konuyu anlayacağınızı düşünüyorum. Öncelikle df isimli veri çerçevemize göz atalım.

print(df)
max_speed shield
cobra 1 2
viper 4 5
sidewinder 7 8

Görüldüğü üzere, satır sırası aşağı doğru, cobra, viper ve sidewinder olarak devam ediyor. Yukarıda öğrendiğimiz şekilde sadece, mantık (boole) listesi ile seçim yaparsak yani df[[False, True, False]] yazar ve kodu çalıştırısak 0. ve 2. indekste kayıtlı satırları gizle, sadece 1. indekste kayıtlı viper satırını göster demiş oluruz. Kodun çıktısını aşağıda görebilirsiniz;

print(df[[False, True, False]])
max_speed shield
viper 4 5

[False, True, False] listesini, Pandas Seriler (Series) veri yapısını kullanarak, aynı veri çerçevesine, indeks sırasını değiştirerek (hizalayarak) uygulayıp sonucu görelim.

print(df.loc[pd.Series([False, True, False], index=['viper', 'sidewinder', 'cobra'])])
max_speed shield
sidewinder 7 8

index=['viper', 'sidewinder', 'cobra'] kodu ile indeks sırasını değiştirip ardında 0. ve 2. indekste kayıtlı satırları gizle, sadece 1. indekste kayıtlı satırını göster demiş olduk. Satır sırası değiştiği için 1. indeksteki satır sidewinder oldu ve bu satıra ait bilgiler ekrana yazdırıldı.