2013-04-07 55 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

相关问题