Etiket ve Konum Tabanlı Erişim
.loc (etiket) ve .iloc (tamsayı konumu) ile öğeleri alın ve ikisi arasındaki farkı anlayın.
Etiket ve Konum Tabanlı Erişim, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Series Öğelerine Erişmenin İki Yolu
Pandas, bir Series'ten öğe seçmek için iki temel erişim yöntemi sunar: .loc, etiket tabanlı erişim; .iloc ise tamsayı konumu tabanlı erişim sağlar. Hangisini ne zaman kullanacağınızı anlamak çok önemlidir — tamsayı index'li bir Series'te yanlış olanı kullanmak kafa karıştırıcı sonuçlar üretir ve Pandas 2.0, belirsiz doğrudan köşeli parantez kullanımlarının çoğunu kullanımdan kaldırmıştır.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.loc['b']) # 20 -- by label
print(s.iloc[1]) # 20 -- by position.loc: Etiket Tabanlı Erişim
.loc, öğelere index etiketi aracılığıyla erişir. Tek bir etiket (bir skaler döndürür), etiketlerden oluşan bir liste (bir Series döndürür) veya etiketlerden oluşan bir dilim (Python dilimlerinin aksine her iki uç da dahil edilir) verebilirsiniz. Etiket mevcut değilse Pandas bir KeyError oluşturur. Etiketlerin anlamlı olduğu durumlarda (tarihler, adlar, kimlikler) .loc kullanın.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['c']) # 30
print(s.loc[['a', 'c']]) # a:10 c:30
print(s.loc['b':'d']) # b:20 c:30 d:40 -- inclusive.iloc: Konum Tabanlı Erişim
.iloc, index etiketlerini tamamen yok sayarak öğelere tamsayı konumları (0'dan başlayarak) üzerinden erişir. Bu işlem Python listesi dizinlemesi gibi davranır: negatif konumlar sondan sayılır ve dilimler, Python'daki son konumun hariç tutulduğu kuralı izler. Etiketi ne olursa olsun 'n'inci' öğeye ihtiyaç duyduğunuzda .iloc kullanın.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.iloc[2]) # 30 -- third element
print(s.iloc[-1]) # 50 -- last element
print(s.iloc[1:4]) # b:20 c:30 d:40 -- exclusive stop.loc ve .iloc Ne Zaman Farklıdır
Fark, özellikle tamsayı etiketli Series nesnelerinde önemlidir. Bir Series'in index etiketleri [5, 10, 15] ise s.loc[5], 5 etiketli öğeyi (ilk öğeyi) döndürürken s.iloc[5], bir IndexError oluşturur (yalnızca 3 öğe vardır). Seçiminizi daima 'X etiketli öğe' ile 'X'inci öğe' arasındaki niyetinize göre yapın.
import pandas as pd
s = pd.Series([100, 200, 300], index=[5, 10, 15])
print(s.loc[10]) # 200 -- element with label 10
print(s.iloc[1]) # 200 -- second element
# s.loc[1] would raise KeyError -- no label 1.loc ile Birden Çok Etiket Seçme
Birden çok öğeyi herhangi bir sırada ve gerekirse tekrarlı olarak seçmek için .loc işlevine bir liste verin. Sonuç, sağladığınız listedeki etiketlerle aynı etiketlere sahip yeni bir Series olur. Bu işlem NumPy'deki gelişmiş dizinlemeye benzer, ancak konumlar yerine index etiketlerine göre hizalanır. Analitik veri işleme hatlarında sütunları yeniden sıralamak veya alt kümesini seçmek için yaygın olarak kullanılır.
import pandas as pd
s = pd.Series({'Jan': 100, 'Feb': 200, 'Mar': 300, 'Apr': 400})
# Select Q1 months in reverse order
print(s.loc[['Mar', 'Feb', 'Jan']])
# Mar 300
# Feb 200
# Jan 100.loc ile Etiket Dilimleme
Python dilimlerinden farklı olarak .loc dilimlerinde her iki uç da dahildir. s.loc['b':'d'], b, c ve d etiketli öğeleri döndürür. Python'ın son konumu hariç tutan kuralına alışkınsanız bu şaşırtıcı olabilir. Aralarında dilimleme yaptığınız etiketlerin index'te gerçekten bulunduğundan emin olun; aksi hâlde dilim sessizce beklenmedik sonuçlar döndürebilir.
import pandas as pd
s = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
# b 1
# c 2
# d 3
# dtype: int64
# Note: 'd' is INCLUDED (inclusive stop).loc ile Mantıksal Dizinleme
Öğeleri filtrelemek için .loc öğesine bir boolean Series aktarabilirsiniz. Boolean Series, hedef Series ile aynı dizine sahip olmalıdır. Bu, NumPy boolean maskelemenin Pandas karşılığıdır ve & ile | kullanarak bileşik koşulları destekler. DataFrames içindeki satırları filtrelemenin de standart yoludur.
import pandas as pd
s = pd.Series([3, 7, 2, 9, 1], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc[s > 4])
# b 7
# d 9
# dtype: int64.loc ve .iloc ile Değer Atama
Hem .loc hem de .iloc, değerleri yerinde değiştirmek için atamanın sol tarafında kullanılabilir. Doğru kullanım biçimi budur; s['a'] = 99 gibi zincirleme dizinleme, DataFrames içinde SettingWithCopyWarning uyarısını tetikleyebilir. Series için doğrudan etiket erişimi genellikle güvenlidir; ancak .loc açıkça ne yaptığınızı belirtir ve önerilir.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s.loc['b'] = 99
print(s)
# a 10
# b 99
# c 30Bir Series'e Köşeli Parantezle Erişim
Doğrudan köşeli parantez gösterimi olan s['label'], etiket erişimi için çalışır ve dize dizinlerinde s.loc['label'] ile eşdeğerdir. Tamsayı dizinlerinde davranış belirsizdir ve Pandas 2.0'da değiştirilmiştir; artık her zaman etiket erişimi anlamına gelir. Açıklık ve gelecekte de sorunsuz çalışacak kod için köşeli parantezlerin anlamına güvenmek yerine her zaman açıkça .loc veya .iloc kullanın.
import pandas as pd
s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s['y']) # 20 -- label access via brackets
print(s.loc['y']) # 20 -- explicit and preferredDatetimeIndex İçindeki Öğelere Erişme
Bir Series DatetimeIndex içerdiğinde .loc, aralık seçimini kolaylaştırmak için kısmi tarih dizelerini kabul eder. s.loc['2023'], 2023 yılındaki tüm öğeleri döndürür; s.loc['2023-01':'2023-06'] ise 2023'ün ilk yarısını döndürür. Bu, Pandas'ın zaman serileriyle çalışırken sunduğu en kullanışlı özelliklerden biridir.
import pandas as pd
dates = pd.date_range('2023-01-01', periods=5, freq='ME')
values = pd.Series([10, 20, 30, 40, 50], index=dates)
print(values.loc['2023-03':'2023-05'])
# 2023-03-31 30
# 2023-04-30 40
# 2023-05-31 50Tek Bir Öğeye Hızlı Erişim için at ve iat
.at[label] ve .iat[position], tek bir öğeye sıkı bir döngü içinde erişirken .loc ve .iloc'dan daha hızlı olan, eniyileştirilmiş skaler erişim araçlarıdır; bunun nedeni, bir Series nesnesi döndürmenin ek yükünü atlamalarıdır. Birden fazla öğe seçemezler. Tek bir öğeye tekrarlı erişimlerde en yüksek performansa ihtiyaç duyduğunuzda bunları kullanın.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.at['b']) # 20 -- label scalar access
print(s.iat[2]) # 30 -- position scalar accessHızlı Kontrol
Bu derste öğrendiğiniz .loc ve .iloc konusunu ne kadar anladığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: .loc, öğelere dizin etiketiyle erişir ve dilim bitişlerini kapsar; .iloc, Python listelerinde olduğu gibi dilim bitişlerini kapsamadan tamsayı konumuyla erişir; .at ve .iat, döngülerde tek bir öğeye erişmek için daha hızlı skaler erişim araçlarıdır. Sırada Series üzerinde vektörleştirilmiş işlemleri ve Pandas'ın dizin hizalamasını otomatik olarak nasıl yönettiğini inceleyeceğiz.
Sıkça Sorulan Sorular
“Etiket ve Konum Tabanlı Erişim” dersi ücretsiz mi?
Evet — “Etiket ve Konum Tabanlı Erişim” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Etiket ve Konum Tabanlı Erişim” dersinde ne öğreneceğim?
.loc (etiket) ve .iloc (tamsayı konumu) ile öğeleri alın ve ikisi arasındaki farkı anlayın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Etiket ve Konum Tabanlı Erişim” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Series Oluşturma
- Etiket ve Konum Tabanlı Erişim
- Series Üzerinde Vektörleştirilmiş İşlemler
- Yararlı Series Yöntemleri