2014-07-23 20 views
6

Okumak için kullanmam gereken bir dizi sekme ayrılmış dosyam var, bunları pandalar veri kartı olarak kullan, onlarla ilgili bir sürü işlem yap ve sonra bunları bir excel dosyasına birleştir, kod ben ayrıştırma ediyorum oanahtar hatası ve MultiIndex lexsort derinliği

sekme dosyalarının sorunlu kısmı geçmesi için gidiyorum bu yüzden çok uzun sıralar

ben tarafından indeksliyorum bu dosyaları okumak 2.177 hepsi aynı sayıda içerir türünün ilk 2 sütun (ip, int)

df = df.set_index(['id', 'coord']) 
data = OrderedDict() 
#data will contain all the information I am writing to excel 
data[filename_id] = df 

bir o İhtiyaçlarım yapıyorum prosedürleri f ('id' olmanın bu

sample_row = data[sample].ix[index] 

benim indeksi gibi, sütunlar 'id' ve 'coord' ile endeksli karışık türlerinden dataframe içeren veri [sample_id] her satıra erişmek ,) 'coord'

her şey iyi çalışıyor dosyasının bir alt kümesini tedavi, ama ben 2177 çizgilerle tüm dosyaları okursanız ben SO aradık bu hata mesajını

KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)' 

sahip sonunda ise

ve her yerde ve bu, endeksi sıralamanın bir sorunu gibi görünüyor, ama neden bizi anlamıyorum Sıralanmamış bir altkümenin girilmemesi, sorunun neden ortaya çıkmamasına dair bir fikre neden olmaz?

Teşekkür

cevap

5

Dokümanlar oldukça iyidir. Çoklu endeksler ile çalışıyorsanız o aracılığıyla onları okumak öder here

In [9]: df = DataFrame(np.arange(9).reshape(-1,1),columns=['value'],index=pd.MultiIndex.from_product([[1,2,3],['a','b','c']],names=['one','two'])) 

In [10]: df 
Out[10]: 
     value 
one two  
1 a  0 
    b  1 
    c  2 
2 a  3 
    b  4 
    c  5 
3 a  6 
    b  7 
    c  8 

In [11]: df.index.lexsort_depth 
Out[11]: 2 

In [12]: df.sortlevel(level=1) 
Out[12]: 
     value 
one two  
1 a  0 
2 a  3 
3 a  6 
1 b  1 
2 b  4 
3 b  7 
1 c  2 
2 c  5 
3 c  8 

In [13]: df.sortlevel(level=1).index.lexsort_depth 
Out[13]: 0 

In [9]: df = DataFrame(np.arange(9).reshape(-1,1),columns=['value'],index=pd.MultiIndex.from_product([[1,2,3],['a','b','c']],names=['one','two'])) 

In [10]: df 
Out[10]: 
     value 
one two  
1 a  0 
    b  1 
    c  2 
2 a  3 
    b  4 
    c  5 
3 a  6 
    b  7 
    c  8 

In [11]: df.index.lexsort_depth 
Out[11]: 2 

In [12]: df.sortlevel(level=1) 
Out[12]: 
     value 
one two  
1 a  0 
2 a  3 
3 a  6 
1 b  1 
2 b  4 
3 b  7 
1 c  2 
2 c  5 
3 c  8 

In [13]: df.sortlevel(level=1).index.lexsort_depth 
Out[13]: 0 

Güncelleme (bkz birkaç kez!):

sortlevel böylece kaldırılacaktır kullanmak sort_index yani

df.sort_index(level=1) 
+0

Teşekkür ederim Jeff, bunu biliyorum ve dokümanı okudum ama sorun şu ki, sadece garip bulduğum 1000 satırdan büyük veri ağı için oluyor! – Rad

+4

Sadece sort_index() – Rad

+0

yaparak sorunumu çözdüm Dokümanlar için bu özel bağlantıya artık bir bağlantı yoksa, bu [http://pandas.pydata.org/pandas-docs/ adresinden yararlanabilirsiniz. Bunun yerine kararlı/indexing.html # etiketlerle dilimleme). – Akronix

İlgili konular