Bence kabul edilen cevap kafa karıştırıcı, çünkü sadece eksik değerlere sahip bir DataFrame kullanıyor. Ben de terimi sevmiyorum pozisyon bazlı için .iloc
ve bunun yerine, tercih konuma tamsayı çok daha açıklayıcı ve tam olarak ne kadar .iloc
anlamına gelir. Anahtar kelime INTEGER - .iloc
INTEGERS gerekiyor.
Daha fazla bilgi için alt küme seçiminde son derece ayrıntılı blog dizimi görün
.ix kullanımdan kaldırıldı ve belirsiz ve asla kullanılmamalıdır
Kullanımdan .ix
kaldırıldığı için yalnızca .loc
ve arasındaki farklılıklara odaklanacağız .iloc
.
Farklılıklar hakkında konuşmadan önce, DataFrame'lerin her sütunu ve her dizini tanımlamaya yardımcı olan etiketler 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
kullanılır indeksi .
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 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
Öncelikle, .loc
yalnızca dizin veya sütun etiketlerine göre veri seçen dizinleyici hakkında konuşacağız . Örnek DataFrame'imizde, dizin için değer olarak anlamlı adlar verdik. Birçok DataFrames anlamlı bir isme sahip olmayacak ve bunun yerine varsayılan olarak sadece 0 ile n-1 arasındaki tamsayıları alacaktır; burada n, DataFrame uzunluğudur.
Kullanabileceğiniz üç farklı giriş var .loc
- 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.
Kullanabileceğiniz üç farklı giriş var .iloc
- 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ı. 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
, tamsayıları aşağıdakilere sahip etiketlere 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 ç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ü,, []
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'