2013-04-07 59 views
31

Bunun için etrafa bakıyorum ama bulamıyorum (aşırı derecede önemsiz olsa da).Veri çerçevesindeki son elemanın Access endeksi

Sahip olduğum sorun, bir veri çerçevesinin ilk ve son girişleri için bir sütunun değerini almak istiyorum.

df.ix[0]['date'] 

alıyorum:

datetime.datetime(2011, 1, 10, 16, 0) 

ama bunu yaparsam: Ama eğer

df[-1:]['date'] 

alıyorum: Farklı bir biçimi ile

myIndex 
13   2011-12-20 16:00:00 
Name: mydate 

. İdeal olarak, veri çerçevesinin son endeksinin değerine erişebilmek istiyorum ama nasıl olduğunu bulamıyorum.

Hatta endeksi değerlerine sahip bir sütun (IndexCopy) oluşturabilir ve deneyin çalışılmıştır:

df.ix[df.tail(1)['IndexCopy']]['mydate'] 

ancak bu da (farklı bir biçim verir çünkü df.tail (1) [ 'IndexCopy'] basit bir tam sayı üretmez).

Herhangi bir fikrin var mı?

cevap

40

eski cevabı şimdi .iloc yerini almaktadır:

>>> df = pd.DataFrame({"date": range(10, 64, 8)}) 
>>> df.index += 17 
>>> df 
    date 
17 10 
18 18 
19 26 
20 34 
21 42 
22 50 
23 58 
>>> df["date"].iloc[0] 
10 
>>> df["date"].iloc[-1] 
58 

Ben kullanımların .iget() düşünebilirsiniz kısa yoldur: Alternatif

>>> df = pd.DataFrame({"date": range(10, 64, 8)}) 
>>> df.index += 17 
>>> df 
    date 
17 10 
18 18 
19 26 
20 34 
21 42 
22 50 
23 58 
>>> df['date'].iget(0) 
10 
>>> df['date'].iget(-1) 
58 

:

>>> df['date'][df.index[0]] 
10 
>>> df['date'][df.index[-1]] 
58 

Ayrıca, .first_valid_index() ve .last_valid_index() da var, ancak NaN s'yi dışlamak isteyip istemediğinize bağlı olarak, istediğiniz gibi olmayabilirler.

df.ix[0] size ilk vermez unutmayın, ancak 0. tarafından dizine bir Örneğin, yukarıda durumda df.ix[0]

>>> df.ix[0] 
Traceback (most recent call last): 
    File "<ipython-input-489-494245247e87>", line 1, in <module> 
    df.ix[0] 
[...] 
KeyError: 0 
+0

Cevabınız için teşekkürler. Ancak, df.ix [0] 'ın ilk indeks 0 olmasa bile veri çerçevesinin ilk satırını verdiğini düşündüğüm başka bir veri çerçevem ​​var. Özellikle, df.index [0] sonucu 0 değil, df.ix [df.index [0]] ve df.ix [0] aynı sonucu verir. Neden? – elelias

+0

Dizini görmem gerekirdi, ancak indeksin sayısal olmadığı için, sanırım * tamsayı ile erişebilmek, bir indekse değil, bir anahtar gibi davranabilir. Bunun nedeni, “Something ([" A "," B "," C "]) [1] 'i istemeniz istendiğinde sormak istediğiniz herhangi bir belirsizlik olmamasıdır, fakat eğer bir şeyiniz varsa ne istiyorsunuz? [1,2,3,4]) [1] '? Dahil olan bazı baş ağrılarındaki [http://pandas.pydata.org/pandas-docs/dev/gotchas.html#integer-indexing] çeşitli bölümleri okuyun. – DSM

3
df.tail(1).index 

en okunabilir görünüyor üretecektir

+0

Bu, bir sayı döndürmez, ancak: RangeIndex (start = 6, stop = 7, step = 1) – alexandergs

+1

alex: döndürülmüş 'dizin'den,' start = 6 ', son öğenin ofsetini gösterir. Yani, df.tail (1) 'son elementi alır, 'df [' your_column '] [6]' 'for_column' için son öğe olur, ama (df.last_valid_index()' numara) – michael

4

@ Comte'un cevabı ve Get index of a row of a pandas dataframe as an integer

df.tail(1).index.item() 
yılında dmdip cevabını birleştiren 10

, endeksin değerini verir. yönelimler belirlenmiştir olduklarını


Not değil her zaman iyi onlar endeksli-çoklu endeksli veya bekar fark etmez tanımlanır. Çok endeksli bir vakayla bir örneğimiz olacak, ancak bunun tek endeksli bir durumda da geçerli olduğunu unutmayın.Örneğin,

df = pd.DataFrame({'x':[1,1,3,3],'y':[3,3,5,5]},index=[11,11,12,12]).stack() 

11 x 1 
    y 3 
    x 1 
    y 3 
12 x 3 
    y 5    # index is (12, 'y') 
    x 3 
    y 5    # index is also (12, 'y') 

df.tail(1).index.item() # gives (12, 'y') 

Böylece endeks ile son öğe erişmeye çalışan df[12, "y"] geçen satırın endeksi değerini erişmeye öğrenmiş olsa Dolayısıyla

(12, y) 5 
(12, y) 5 
dtype: int64 

verir o olmayabilir Aynı dizini paylaşan birçok kişi olabileceğinden, endeks dizinine göre son satırın değerlerini değiştirmek isterseniz iyi bir fikir. Yine de, bu durumda son satıra erişmek için df.iloc[-1] kullanmalısınız.

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.item.html

İlgili konular