2013-04-07 107 views
31

我已經四處尋找這個,但我似乎無法找到它(儘管它一定是非常微不足道的)。數據幀中最後一個元素的訪問索引

我的問題是我想檢索一個數據框的第一個和最後一個條目列的值。但是,如果我做的:

df.ix[0]['date'] 

我得到:

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

,但如果我這樣做:

df[-1:]['date'] 

我得到:

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

有不同的格式。理想情況下,我希望能夠訪問數據框最後一個索引的值,但我無法找到。

我甚至試圖與索引的值創建一列(IndexCopy),並嘗試:

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

但是這也產生了不同的格式(因爲df.tail(1)[「IndexCopy」]不輸出一個簡單的整數)。

任何想法?

回答

40

前者的答案是現在.iloc取代:

>>> 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 

我能想到的用途.iget()的最短路徑:

>>> 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 

還有.first_valid_index().last_valid_index(),但取決於您是否要排除NaN s,它們可能不是您想要的。

記住df.ix[0]不給你的第一個,但一個由0索引例如,在上述情況下,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

感謝您的回答。 但是,我有另一個數據幀,其中df.ix [0]似乎給出了數據幀的第一行,即使第一個索引不是0.特別是,df.index [0]的結果是不是0,但df.ix [df.index [0]]和df.ix [0]確實給出了相同的結果。這是爲什麼? – elelias 2013-04-07 15:00:12

+0

我需要看到索引,但我懷疑這是因爲索引是非數值的,在這種情況下,整數*的訪問*可能像索引一樣行爲,而不是鍵。這是因爲如果你要求'Something([「A」,「B」,「C」])[1]',那麼你要求的內容沒有歧義,但是如果你有'Something [1,2,3,4])[1]'?閱讀各種部分[在這裏的文檔](http://pandas.pydata.org/pandas-docs/dev/gotchas.html#integer-indexing)涉及的一些頭痛。 – DSM 2013-04-07 15:10:38

3
df.tail(1).index 

似乎最可讀的

+0

這不會返回一個數字,但是:RangeIndex(start = 6,stop = 7,step = 1) – alexandergs 2016-06-07 03:06:40

+1

alex:從返回的index中,start = 6表示最後一個元素的偏移量。因此,'df.tail(1)'得到最後一個元素,'df [「your_column」] [6]''是'your_column'等的最後一個元素,但是'df.last_valid_index號碼) – michael 2017-11-27 08:04:59

4

@comte的回答和dmdip的回答在Get index of a row of a pandas dataframe as an integer

df.tail(1).index.item() 

給你指數的價值。


注意的indeces是總是明確定義並不重要,他們是多索引或單索引。我們將舉一個多索引案例,但請注意,在單索引案例中也是如此。例如,

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') 

因此,試圖與索引訪問最後一個元素df[12, "y"]

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

因此,即使我們學會了訪問最後一排的指數值,它可能不是如果您想根據索引更改最後一行的值,這是一個好主意,因爲可能有許多共享相同的索引。不過,在這種情況下,您應該使用df.iloc[-1]來訪問最後一行。

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

相關問題