Kurs
Pandas’ı öğrenirken hepimizin kafasını karıştıran konulardan biri .loc ile .iloc arasındaki ayrımdır.
Bu karışıklığa son verelim ve bu iki yöntem arasındaki farkı netleştirelim. Bolca örnek vereceğim; yazının sonunda farkın çok daha açık olacağını umuyorum.
Pandas’ta .loc ve .iloc Nedir?
.loc ve .iloc, Pandas DataFrame’lerinin temel öznitelikleridir ve belirli veri alt kümelerini seçmek için kullanılır. Amaçları, tüm DataFrame yerine belirli bir kısmına erişip onu düzenlemeyi sağlamaktır.
|
Özellik |
.loc |
.iloc |
|
Sözdizimi |
df.loc[row_indexer, column_indexer] |
df.iloc[row_indexer, column_indexer] |
|
İndeksleme Yöntemi |
Etikete dayalı indeksleme |
Pozisyona dayalı indeksleme |
|
Başvuru İçin Kullanılan |
Satır ve sütun etiketleri (adları) |
Satır ve sütunların sayısal indisleri (0’dan başlayarak) |
Tablodan gördüğümüz gibi sözdizimi oldukça benzer. Fark, row_indexer ve column_indexer argümanlarını nasıl kullandığımızda ortaya çıkar. Bunun nedeni, iki yöntemin veriyi farklı şekilde indekslemesidir: .loc etiket adlarına göre indekslerken, .iloc argüman olarak satır ve sütunların sayısal pozisyon indislerini alır.
Önce .loc ile başlayarak her iki yöntemi de ayrıntılı inceleyelim.
.loc Kullanımı: Etiketlerle Seçim
Kavramları somutlaştırmak için, satır indeksini Customer ID’nin temsil ettiği, df adlı bu DataFrame ile varsayımsal bir müşteri veritabanını düşünelim:
|
Customer ID |
Name |
Country |
Region |
Age |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
|
C567 |
David Lee |
China |
Asia |
40 |
.loc ile satır seçmenin dört temel yolu vardır. Bunlar şunlardır:
- Tek bir satır seçme
- Birden çok satır seçme
- Satır dilimi seçme
- Koşullu satır seçimi
.loc ile tek bir satır seçme
Tek bir satır seçmek için almak istediğimiz satırın etiketini row_indexer olarak kullanırız. Buna göre sözdizimi şöyle görünür: df.loc['row_label']. Bunu kullanarak müşterimiz Ali Khan ile ilgili tüm bilgileri gösterelim:
df.loc['C345']
|
C345 |
|
|
Name |
Ali Khan |
|
Country |
Pakistan |
|
Region |
Asia |
|
Age |
19 |
.loc ile birden çok satır seçme
Sıralı olmak zorunda olmayan birden çok satır seçmek istiyorsak, row_indexer argümanı olarak satır etiketlerinden oluşan bir liste geçirmemiz gerekir. Bu da normal .loc sözdizimi için bir çift, etiket listesi için bir çift olmak üzere iki köşeli parantez çifti kullanmamız gerektiği anlamına gelir.
df.loc[['row_label_1', 'row_label_2']] satırı, listede belirtilen df DataFrame’inin iki satırını döndürür. Diyelim ki yalnızca Ali Khan’ın değil, David Lee’nin bilgilerini de görmek istiyoruz:
df.loc[['C345', 'C567']]
|
Customer ID |
Name |
Country |
Region |
Age |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C567 |
David Lee |
China |
Asia |
40 |
.loc ile satır dilimi seçme
İki satır etiketinin arasına iki nokta üst üste koyarak bir satır aralığı seçebiliriz: df.loc['row_label_start':'row_label_end']. DataFrame’imizin ilk dört satırını şu şekilde görüntüleyebiliriz:
df.loc['C123' : 'C456']
|
Customer ID |
Name |
Country |
Region |
Signup Date |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
Burada akılda tutulması gereken iki nokta var:
- Çıktı,
row_label_endile belirtilen satırı da içerir. Bu, daha sonra ele alacağımız.iloc’ta farklıdır. - Birden çok satır istesek de yalnızca bir çift köşeli parantez kullanırız. Çeşitli satırları belirtmek için liste kullanmadığımızdan, iki köşeli parantez kullanmak bir
SyntaxErrordöndürür.
.loc ile koşullu satır seçimi
Koşullu bir ifadeye göre de satırları döndürebiliriz. Belirli bir koşulu sağlayıp sağlamadıklarına göre tüm satırları filtreleyip yalnızca sağlayanları gösterebiliriz.
İlgili sözdizimi df.loc[conditional_expression] şeklindedir; burada conditional_expression, belirli bir sütundaki izin verilen değerlere ilişkin bir ifadedir.
Sayısal olmayan veriye sahip sütunlar (ör. Name veya Country) için ifadede yalnızca eşit veya eşit değil operatörleri kullanılabilir; çünkü değerler arasında doğal bir sıralama yoktur. Örneğin, Asya’dan olmayan müşterilerin tüm satırlarını döndürebiliriz:
df.loc[df['Region'] != 'Asia']
|
Customer ID |
Name |
Country |
Region |
Age |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
.loc ile tek bir sütun seçme
Sütun seçmek için, row_indexer argümanından sonra gelen column_indexer argümanını belirtmemiz gerekir. Yalnızca column_indexer belirtmek istiyorsak, tüm satırları döndürmek, filtreyi yalnızca sütunlarda uygulamak istediğimizi bir şekilde işaretlemeliyiz. Bunu nasıl yapabileceğimize bakalım!
Tek bir sütun seçmek, ilgili sütunun etiketiyle column_indexer’ı belirtmekle yapılabilir. Tüm satırları almak için row_indexer’ı tek bir iki nokta üst üste ile belirtmemiz gerekir. Böylece şu sözdizimine ulaşırız: df.loc[:, 'column_name'].
Her müşterinin Name bilgisini gösterelim:
df.loc[:, 'Name']
|
Customer ID |
Name |
|
C123 |
John Doe |
|
C234 |
Petra Müller |
|
C345 |
Ali Khan |
|
C456 |
Maria Gonzalez |
|
C567 |
David Lee |
.loc ile birden çok sütun seçme
Sıralı olmak zorunda olmayan bir DataFrame sütunlarının birden fazlasını döndürmek istiyorsak, sütun etiketlerinden oluşan bir liste geçirmemiz gerekir: df.loc[:, [col_label_1, 'col_label_2']].
Son çıktımıza tüm müşterilerin Age bilgisini de eklemek isteseydik, şöyle yapardık:
df.loc[:, ['Name', 'Age']]
|
Customer ID |
Name |
Age |
|
C123 |
John Doe |
67 |
|
C234 |
Petra Müller |
51 |
|
C345 |
Ali Khan |
19 |
|
C456 |
Maria Gonzalez |
26 |
|
C567 |
David Lee |
40 |
.loc ile sütun dilimi seçme
İki sütun etiketinin arasına iki nokta üst üste koymak, belirtilen sütunlar arasındaki tüm sütunları (son sütun dahil) seçer. Standart sözdizimi şöyledir: df.loc[:, 'col_start':'col_end'].
Müşterilerimizin Name, Country ve Region bilgileriyle ilgileniyorsak, kod satırımız şöyle olabilir:
df.loc[:, 'Name':'Region']
|
Customer ID |
Name |
Country |
Region |
|
C123 |
John Doe |
United States |
North America |
|
C234 |
Petra Müller |
Germany |
Europe |
|
C345 |
Ali Khan |
Pakistan |
Asia |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
|
C567 |
David Lee |
China |
Asia |
.loc ile birleşik satır ve sütun seçimi
Hem row_indexer hem de column_indexer belirtmek de mümkündür. Bu, DataFrame’den tek bir hücre (bir bilgi) getirmek için kullanılabilir. Bunu yapmak için bir satır ve bir sütunu şu sözdizimiyle belirtiriz: df.loc['row_label', 'column_name'] .
Daha kullanışlı olan durum ise tam olarak ilgilendiğimiz satır ve sütun kümesine odaklanan bir alt DataFrame döndürmektir. Her iki indeksleyiciyi de köşeli parantezlerle liste olarak ya da iki nokta üst üste ile dilim olarak belirtebilir, hatta satır seçimini koşullu ifadeyle de birleştirebiliriz.
Aşağıda, Age değeri 30’un üzerinde olan her müşterinin Name, Country ve Region bilgilerini döndüren bir örnek var:
df.loc[df['Age'] > 30, 'Name':'Region']
|
Customer ID |
Name |
Country |
Region |
|
C123 |
John Doe |
United States |
North America |
|
C234 |
Petra Müller |
Germany |
Europe |
|
C567 |
David Lee |
China |
Asia |
.iloc Kullanımı: Tamsayı Pozisyonuyla Seçim
.iloc, etiket yerine pozisyona göre seçer. .iloc kullanmanın standart sözdizimi şudur: df.iloc[row_indexer, column_indexer]. Dikkat edilmesi gereken iki özel nokta var:
- 0’dan başlama: İlk satır ve sütunun indisi 0’dır; ikincisi 1, vb.
- Aralık son değerinin hariç tutulması: Dilim kullanıldığında, iki nokta üst üsteden sonra belirtilen satır veya sütun seçime dahil edilmez.
.iloc ile tek bir satır seçme
Tek bir satır, row_indexer olarak satır indis numarasını temsil eden tamsayı kullanılarak seçilebilir. .loc’ta yaptığımız gibi bir etiket dizgesi değil tamsayı girdiğimiz için tırnak işaretine gerek yoktur. df adlı bir DataFrame’in ilk satırını döndürmek için df.iloc[0] girin.
Örnek DataFrame’imizde bu kod satırı John Doe’nun bilgilerini döndürür:
df.iloc[0]
|
C123 |
|
|
Name |
John Doe |
|
Country |
United States |
|
Region |
North America |
|
Age |
67 |
.iloc ile birden çok satır seçme
.iloc’ta birden çok satır seçimi .loc’ta olduğu gibi çalışır—satır indis tamsayılarını köşeli parantezli bir liste içinde gireriz. Sözdizimi şu şekildedir: df.iloc[[0, 3, 4]].
Müşteri tablomuzdaki ilgili çıktı aşağıda görülebilir:
df.iloc[[0, 3, 4]]
|
Customer ID |
Name |
Country |
Region |
Age |
|
C123 |
John Doe |
United States |
North America |
67 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
|
C567 |
David Lee |
China |
Asia |
40 |
.iloc ile satır dilimi seçme
Satır dilimi seçmek için iki satır indis tamsayısının arasına iki nokta üst üste koyarız. Burada, az önce bahsettiğimiz hariç tutma kuralına dikkat etmeliyiz.
df.iloc[1:4] satırını bu kavramı örneklemek için ele alabiliriz. 1 numaralı indis ikinci satır demektir; dilimimiz oradan başlar. 4 indis tamsayısı beşinci satırı temsil eder—ancak .iloc dilim seçiminde sonu kapsamadığı için, çıktı bu satırdan bir önceki satıra kadar olan tüm satırları içerir. Dolayısıyla ikinci, üçüncü ve dördüncü satırı döndürür.
Bu satırın beklendiği gibi çalıştığını görelim:
df.iloc[1:4]
|
Customer ID |
Name |
Country |
Region |
Age |
|
C234 |
Petra Müller |
Germany |
Europe |
51 |
|
C345 |
Ali Khan |
Pakistan |
Asia |
19 |
|
C456 |
Maria Gonzalez |
Mexico |
North America |
26 |
.iloc ile tek bir sütun seçme
.iloc ile sütun seçiminin mantığı, şimdiye dek öğrendiklerimizi takip eder. Tekli sütunlar, çoklu sütunlar ve sütun dilimleri için nasıl çalıştığını görelim.
.loc’ta olduğu gibi, column_indexer’a geçmeden önce row_indexer’ı belirtmek önemlidir. df’in üçüncü sütununun değerlerini tüm satırlar için almak üzere df.iloc[:, 2] gireriz.
DataFrame’imizde üçüncü sütun Region olduğundan, bu kod satırı onun getirilmesiyle sonuçlanacaktır:
df.iloc[:, 2]
|
Customer ID |
Region |
|
C123 |
North America |
|
C234 |
Europe |
|
C345 |
Asia |
|
C456 |
North America |
|
C567 |
Asia |
.iloc ile birden çok sütun seçme
Ardışık olmak zorunda olmayan birden çok sütunu seçmek için yine column_indexer olarak tamsayılardan oluşan bir liste girebiliriz. df.iloc[:, [0, 3]] satırı hem birinci hem dördüncü sütunları döndürür.
Bizim örneğimizde görüntülenen bilgiler, her müşterinin Name ve Age değerleridir:
df.iloc[:, [0, 3]]
|
Customer ID |
Name |
Age |
|
C123 |
John Doe |
67 |
|
C234 |
Petra Müller |
51 |
|
C345 |
Ali Khan |
19 |
|
C456 |
Maria Gonzalez |
26 |
|
C567 |
David Lee |
40 |
.iloc ile sütun dilimi seçme
.iloc ile dilim seçerken, column_indexer mantığı row_indexer ile aynıdır. İki nokta üst üsteden sonraki tamsayıyla temsil edilen sütun çıktıya dahil edilmez. İkinci ve üçüncü sütunları almak için kod satırı şöyle olmalıdır: df.iloc[:, 1:3].
Aşağıdaki satır müşterilerimizle ilgili tüm coğrafi bilgileri döndürür:
df.iloc[:, 1:3]
|
Customer ID |
Country |
Region |
|
C123 |
United States |
North America |
|
C234 |
Germany |
Europe |
|
C345 |
Pakistan |
Asia |
|
C456 |
Mexico |
North America |
|
C567 |
China |
Asia |
.iloc ile birleşik satır ve sütun seçimi
.iloc hakkında öğrendiklerimizi birleştirerek satır ve sütun seçimini birlikte yapabiliriz. Yine, tek bir hücre veya bir alt DataFrame döndürmek mümkündür. Üçüncü satır ile dördüncü sütunun kesişimindeki tek hücreyi döndürmek için df.iloc[2, 3] gireriz.
.loc’ta olduğu gibi, her iki indeksleyiciyi de köşeli parantezlerle liste olarak veya iki nokta üst üste ile dilim olarak belirtebiliriz. Satırları koşullu ifadeler kullanarak seçmek teknik olarak .iloc ile de mümkündür; ancak önerilmez. Etiket adlarını ve .loc’u kullanmak genellikle çok daha sezgiseldir ve hata yapma olasılığı daha düşüktür.
Bu son örnek, DataFrame’imizdeki birinci, ikinci ve beşinci satır için Country, Region ve Age bilgilerini görüntüler:
df.iloc[[0,1,4], 1:4]
|
Customer ID |
Country |
Region |
Age |
|
C123 |
United States |
North America |
67 |
|
C234 |
Germany |
Europe |
51 |
|
C567 |
China |
Asia |
40 |
.iloc vs .loc: Hangisini Ne Zaman Kullanmalı?
Genel olarak, yöntem seçimi DataFrame hakkındaki bilginize bağlı olarak şu basit kurala dayanır:
.lockullanın satır/sütunların etiketlerini (adlarını) biliyorsanız.-
.ilockullanın satır/sütunların tamsayı pozisyonlarını biliyorsanız.
Bazı senaryolar doğası gereği .loc veya .iloc’u tercih eder. Örneğin, satırlar veya sütunlar üzerinde gezinmek etiketlerden ziyade tamsayılarla daha kolay ve sezgiseldir. Zaten belirttiğimiz gibi, sütun değerlerine dayalı koşullarla satırları filtrelemek, sütun etiket adlarını kullanarak daha az hataya açıktır.
|
.loc’u Tercih Ettiren Senaryolar |
.iloc’u Tercih Ettiren Senaryolar |
|
DataFrame’inizin anlamlı indeks/sütun adları vardır. |
Satırlarda/sütunlarda pozisyonlarına göre gezinirsiniz. |
|
Sütun değerlerine ilişkin koşullara göre filtreleme yapmanız gerekir. |
İndeks/sütun adları göreviniz için önemli değildir. |
.loc ve .iloc ile KeyError, NameError ve IndexError
Olası sorunlara bakalım. .loc kullanırken sık görülen bir tuzak KeyError’dır. Bu hata, DataFrame’imizde bulunmayan bir satır veya sütun etiketine erişmeye çalıştığımızda ortaya çıkar. Bunu önlemek için, kullandığımız etiketlerin doğru olduğundan, DataFrame’inizdeki mevcut etiketlerle eşleştiğinden emin olmalı ve yazım hatalarını iki kez kontrol etmeliyiz.
Ayrıca, .loc ile belirtilen etiketler için her zaman tırnak işaretleri kullanmak önemlidir. Bunları unutmak bir NameError döndürür.
Bir IndexError, .iloc kullanırken, DataFrame’inizin geçerli indis aralığının dışında bir tamsayı pozisyonu belirtirsek oluşabilir. Bu, erişmeye çalıştığınız indisin var olmaması—DataFrame’inizdeki satır veya sütun sayısını aşması ya da negatif olması—durumunda meydana gelir. Bu hatayı önlemek için, DataFrame’in boyutlarını kontrol edin ve geçerli aralık içindeki uygun indis değerlerini kullanın.
Sonuç
Umarım bu yazı faydalı olmuştur ve .loc ile .iloc arasındaki fark artık nettir. Daha fazlası için iyi birer sonraki adım olabilecek bazı kaynaklar:

Tom bir veri bilimci ve teknik eğitmendir. DataCamp'in veri bilimi eğitim içerikleri ve blog yazılarını yazar ve yönetir. Daha önce Tom, Deutsche Telekom'da veri bilimi alanında çalıştı.