Pandaların bir DataFrame'den seçim yapmasının iki ana yolu vardır.
Belgeler, tamsayı konumuna atıfta bulunmak için konum terimini kullanır . Kafa karıştırıcı olduğunu düşündüğüm için bu terminolojiyi sevmiyorum. Tamsayı konumu daha açıklayıcı ve tam olarak ne anlama geliyor . Buradaki anahtar kelime INTEGER.iloc
- tamsayı konumuna göre seçim yaparken tamsayıları kullanmalısınız.
Özeti göstermeden önce şunlardan emin olalım ...
.ix kullanımdan kaldırıldı ve belirsiz ve asla kullanılmamalıdır
Pandalar için üç birincil dizinleyici vardır . Dizin oluşturma operatörünün kendisi (parantezler []
) .loc
, ve .iloc
. Onları özetleyelim:
[]
- Öncelikle sütun alt kümelerini seçer, ancak satırları da seçebilir. Aynı anda satır ve sütun seçilemez.
.loc
- satırların ve sütunların alt kümelerini yalnızca etikete göre seçer
.iloc
- satırların ve sütunların alt kümelerini yalnızca tamsayı konumuna göre seçer
Neredeyse hiç kullanmıyorum .at
veya .iat
ek işlevsellik eklemedikleri için ve sadece küçük bir performans artışı ile. Çok zamana duyarlı bir uygulamanız yoksa kullanımlarını caydırırdım. Ne olursa olsun, onların özeti var:
.at
DataFrame'de yalnızca etikete göre tek bir skaler değer seçer
.iat
DataFrame'de yalnızca tamsayı konumuna göre tek bir skaler değer seçer
Etikete ve tamsayı konumuna göre seçime ek olarak, boole dizine ekleme olarak da bilinen boole seçimi vardır.
Örnekler açıklama .loc
, .iloc
boolean seçimi ve .at
ve .iat
aşağıda gösterilmiştir
Önce .loc
ve arasındaki farklara odaklanacağız .iloc
. Farklılıklar hakkında konuşmadan önce, DataFrame'lerin her sütunu ve her satırı tanımlamaya yardımcı olan etiketlere sahip olduğunu anlamak önemlidir. Örnek bir DataFrame'e bakalım:
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])
Kalın yazılmış tüm kelimeler etiketlerdir. Etiketler, age
, color
, food
, height
, score
ve state
kullanılan sütunlar . Diğer etiketler, Jane
, Nick
, Aaron
, Penelope
, Dean
, Christina
, Cornelia
satırlar için etiket olarak kullanılır. Toplu olarak, bu satır etiketleri dizin olarak bilinir .
Bir DataFrame içinde belirli satırları seçmenin birincil yolları .loc
ve .iloc
indeksleyicileridir. Bu dizinleyicilerin her biri aynı anda sütunları seçmek için de kullanılabilir, ancak şimdilik sadece satırlara odaklanmak daha kolaydır. Ayrıca, dizinleyicilerin her biri seçimlerini yapmak için adlarını hemen takip eden bir küme parantez kullanır.
.loc verileri yalnızca etiketlerle seçer
Önce hakkında konuşacağız .loc
yalnızca dizin veya sütun etiketlerine göre veri seçen dizinleyici . Örnek DataFrame'imizde, dizin için değer olarak anlamlı adlar verdik. Birçok DataFrames anlamlı bir isme sahip olmayacak ve bunun yerine, sadece 0 ile n-1 arasındaki tamsayıları varsayılan olarak alacaktır; burada n, DataFrame'in uzunluğudur (satır sayısı).
Bunlardan üçü için kullanabileceğiniz birçok farklı giriş.loc
vardır.
- Dizi
- Dizelerin bir listesi
- Başlangıç ve bitiş değerleri olarak dizeleri kullanarak dilim gösterimi
Bir dizeyle .loc ile tek bir satır seçme
Tek bir veri satırı seçmek için dizin etiketini aşağıdaki parantezlerin içine yerleştirin .loc
.
df.loc['Penelope']
Bu, veri satırını Seri olarak döndürür
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
Dize listesiyle .loc ile birden çok satır seçme
df.loc[['Cornelia', 'Jane', 'Dean']]
Bu, satırları listede belirtilen sırayla içeren bir DataFrame döndürür:
Dilim gösterimiyle .loc ile birden çok satır seçme
Dilim gösterimi bir başlangıç, durdurma ve adım değerleri ile tanımlanır. Etikete göre dilimleme yaparken, pandalar dönüşte durma değerini içerir. Aaron'dan Dean'e aşağıdaki dilimler dahil. Adım boyutu açıkça tanımlanmadı, ancak varsayılan olarak 1.
df.loc['Aaron':'Dean']
Karmaşık dilimler, Python listelerinde olduğu gibi alınabilir.
.iloc yalnızca tamsayı konumuna göre veri seçer
Şimdi dönelim .iloc
. Bir DataFrame'deki her veri satırı ve sütunu, onu tanımlayan bir tamsayı konumuna sahiptir. Bu, çıktıda görsel olarak görüntülenen etikete ek olarak yapılır. Tamsayı konumu, 0'dan başlayarak üst / soldan başlayan satır / sütun sayısıdır.
Bunlardan üçü için kullanabileceğiniz birçok farklı giriş.iloc
vardır.
- Bir tam sayı
- Tamsayıların listesi
- Başlangıç ve bitiş değerleri olarak tamsayılar kullanarak dilim gösterimi
.İloc ile bir tamsayı içeren tek bir satır seçme
df.iloc[4]
Bu, 5. satırı (tamsayı konumu 4) Seri olarak döndürür
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
Tam sayı listesiyle .iloc ile birden çok satır seçme
df.iloc[[2, -2]]
Bu, üçüncü ve ikinci ile son satırların DataFrame'lerini döndürür:
Dilim gösterimiyle .iloc ile birden çok satır seçme
df.iloc[:5:3]
.Loc ve .iloc ile aynı anda satır ve sütun seçimi
Her ikisinin de mükemmel bir yeteneği, .loc/.iloc
hem satırları hem de sütunları aynı anda seçebilmeleridir. Yukarıdaki örneklerde, tüm sütunlar tüm seçimlerden döndürülmüştür. Satırlar için yaptığımız girişlerin aynısı olan sütunları seçebiliriz. Yalnızca satır ve sütun seçimini virgülle ayırmamız gerekir .
Örneğin, Jane ve Dean satırlarını yalnızca sütun yüksekliği, puanı ve durumuyla aşağıdaki gibi seçebiliriz:
df.loc[['Jane', 'Dean'], 'height':]
Bu, satırlar için bir etiket listesi ve sütunlar için dilim gösterimi kullanır
Doğal olarak .iloc
sadece tamsayılar kullanarak benzer işlemler yapabiliriz .
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
Etiketler ve tamsayı konumu ile eşzamanlı seçim
.ix
etiketler ve tamsayı konumu ile eşzamanlı olarak seçim yapmak için kullanıldı, bu da zaman zaman kafa karıştırıcı ve belirsizdi ve neyse ki kullanımdan kaldırıldı. Bir etiket ve tamsayı konumu karışımıyla seçim yapmanız gerektiğinde, hem seçim etiketlerinizi hem de tamsayı konumlarını yapmanız gerekir.
Örneğin, satırları Nick
ve Cornelia
sütun 2 ve 4 ile birlikte seçmek istiyorsak .loc
, tam sayıları etiketlere aşağıdakilerle dönüştürerek kullanabiliriz :
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
Alternatif olarak, dizin etiketlerini get_loc
dizin yöntemiyle tamsayılara dönüştürün .
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
Boole Seçimi
.Loc dizinleyici de boole seçimini yapabilir. Örneğin, yaşın 30'un üzerinde olduğu tüm satırları bulmak ve yalnızca food
ve score
sütunlarını döndürmek istiyorsak aşağıdakileri yapabiliriz:
df.loc[df['age'] > 30, ['food', 'score']]
Bunu ile çoğaltabilirsiniz, .iloc
ancak bir boolean serisi geçiremezsiniz. Boolean Serisini aşağıdaki gibi bir numpy dizisine dönüştürmelisiniz:
df.iloc[(df['age'] > 30).values, [2, 4]]
Tüm satırları seçme
.loc/.iloc
Sadece sütun seçimi için kullanılabilir . Aşağıdaki gibi iki nokta üst üste kullanarak tüm satırları seçebilirsiniz:
df.loc[:, 'color':'score':2]
Dizin oluşturma operatörü,, []
dilim satırları ve sütunları da seçebilir, ancak aynı anda seçemez.
Çoğu kişi DataFrame indeksleme operatörünün temel amacına aşinadır, bu da sütunları seçmektir. Bir dize, tek bir sütunu Seri olarak seçer ve dizelerin listesi birden çok sütunu DataFrame olarak seçer.
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
Liste kullanmak birden çok sütun seçer
df[['food', 'score']]
İnsanların daha az aşina oldukları şey, dilim gösterimi kullanıldığında, seçimin satır etiketleri veya tamsayı konumu ile gerçekleşmesidir. Bu çok kafa karıştırıcı ve neredeyse hiç kullanmadığım bir şey ama işe yarıyor.
df['Penelope':'Christina'] # slice rows by label
df[2:6:2] # slice rows by integer location
Bir anlaşılırlık .loc/.iloc
seçme satırlar için oldukça tercih edilir. Yalnızca dizin oluşturma operatörü, satırları ve sütunları aynı anda seçemez.
df[3:5, 'color']
TypeError: unhashable type: 'slice'
Tarafından Seçme .at
ve.iat
İle seçim .at
hemen hemen aynıdır, .loc
ancak DataFrame'inizde yalnızca tek bir 'hücre' seçer. Genellikle bu hücreye skaler değer diyoruz. Kullanmak için .at
, virgülle ayrılmış bir satır ve sütun etiketi iletin.
df.at['Christina', 'color']
'black'
İle seçim .iat
neredeyse aynıdır, .iloc
ancak yalnızca tek bir skaler değer seçer. Hem satır hem de sütun konumları için bir tam sayı iletmeniz gerekir
df.iat[2, 5]
'FL'