2015-03-24 24 views
21

Python belgeleri ve forumlar aracılığıyla sütunları seçmenin yollarını aradım ama indeksleme sütunlarındaki her örnek çok basit.Etiketler pandalara göre birden çok sütun seçin

varsayalım ben 10 x 10 dataframe

df = DataFrame(randn(10, 10), index=range(0,10), columns=['A', 'B', 'C', 'D','E','F','G','H','I','J']) 

Şimdiye kadar, tüm dokümantasyon verir

subset = df.loc[:,'A':'C'] 

veya

subset = df.loc[:,'C':] 

Fakat gibi endeksleme sadece basit bir örnek var Bu

gibi çoklu, sıralı olmayan sütunları indekslemeyi denediğimde bir hata alıyorum
subset = df.loc[:,('A':'C', 'E')] 

Sütun A'dan C'ye, E'ye ve G'ye I'yi seçmek istesem Panda'larda nasıl indekslenir? Mantık

subset = df.loc[:,('A':'C', 'E', 'G':'I')] 

Ben çözüm oldukça basit olduğunu düşünüyoruz işe yaramaz, ama bu sorundan alınamıyor anlaşılmaktadır. Teşekkürler!

+1

Sen ilgi tüm sütunların bir listesini oluşturmak ve böylece gibi bu geçmek olurdu .... doğrudan istediğiniz sütunları seçmek 'df [col_list]', buradaki sorun bu ayrıştırma olduğunu Bu sorunlu hale gelir çünkü '('A': 'C')' zaten geçerli bir tuple değil – EdChum

+2

Bu normal indeksleme ile mümkün değildir: bir dilim verebilir ('' A ':' C 'gibi), ya da etiketlerin bir listesi ('[' A ',' B ',' C '] 'gibi), ancak her ikisinin bir kombinasyonu değil. – joris

cevap

23

Burada en az birkaç seçeneğiniz var.

:

df.filter(regex='[A-CEG-I]') 

yer Tabanlı (kolon düzenine bağlıdır) her iki durumda da

cols = list(df.loc[:,'A':'C']) + ['E'] + list(df.loc[:,'G':'I']) 

df[cols] 

Sonuçlar (normal ifade sözdizimi kullanılarak)

Ad-veya etiket Tabanlı

 A B C E G H I 0 -0.814688 -1.060864 -0.008088 2.697203 -0.763874 1.793213 -0.019520 1 0.549824 0.269340 0.405570 -0.406695 -0.536304 -1.231051 0.058018 2 0.879230 -0.666814 1.305835 0.167621 -1.100355 0.391133 0.317467 
+0

İlk çözümde, df [["0, 1"], cols] kullanarak belirli satırları da seçebilirsiniz. Ayrıca, cols değişkeninde kullanılan "liste" kesmenin sütunlar yerine satırlar için benzer bir seçim yapmak için çalışmadığını unutmayın. – WindChimes

2

Sadece

df[['A','E','I','C']] 
+0

Bunu OP için biraz daha açıklayabilir misiniz? – Daniel

+1

Bunun neden kabul edilen yanıt olarak işaretlenmediğini anlamayın. Diğer her cevap karmaşık görünüyor –

İlgili konular