如何获得pandasdataframe的最后一行?

我有pandasdataframe df1df2 (df1是vanila dataframe,df2是由'STK_ID'和'RPT_Date'索引的):

 >>> df1 STK_ID RPT_Date TClose sales discount 0 000568 20060331 3.69 5.975 NaN 1 000568 20060630 9.14 10.143 NaN 2 000568 20060930 9.49 13.854 NaN 3 000568 20061231 15.84 19.262 NaN 4 000568 20070331 17.00 6.803 NaN 5 000568 20070630 26.31 12.940 NaN 6 000568 20070930 39.12 19.977 NaN 7 000568 20071231 45.94 29.269 NaN 8 000568 20080331 38.75 12.668 NaN 9 000568 20080630 30.09 21.102 NaN 10 000568 20080930 26.00 30.769 NaN >>> df2 TClose sales discount net_sales cogs STK_ID RPT_Date 000568 20060331 3.69 5.975 NaN 5.975 2.591 20060630 9.14 10.143 NaN 10.143 4.363 20060930 9.49 13.854 NaN 13.854 5.901 20061231 15.84 19.262 NaN 19.262 8.407 20070331 17.00 6.803 NaN 6.803 2.815 20070630 26.31 12.940 NaN 12.940 5.418 20070930 39.12 19.977 NaN 19.977 8.452 20071231 45.94 29.269 NaN 29.269 12.606 20080331 38.75 12.668 NaN 12.668 3.958 20080630 30.09 21.102 NaN 21.102 7.431 

我可以通过以下方式获取df2的最后3行:

 >>> df2.ix[-3:] TClose sales discount net_sales cogs STK_ID RPT_Date 000568 20071231 45.94 29.269 NaN 29.269 12.606 20080331 38.75 12.668 NaN 12.668 3.958 20080630 30.09 21.102 NaN 21.102 7.431 

df1.ix[-3:]给出所有行:

 >>> df1.ix[-3:] STK_ID RPT_Date TClose sales discount 0 000568 20060331 3.69 5.975 NaN 1 000568 20060630 9.14 10.143 NaN 2 000568 20060930 9.49 13.854 NaN 3 000568 20061231 15.84 19.262 NaN 4 000568 20070331 17.00 6.803 NaN 5 000568 20070630 26.31 12.940 NaN 6 000568 20070930 39.12 19.977 NaN 7 000568 20071231 45.94 29.269 NaN 8 000568 20080331 38.75 12.668 NaN 9 000568 20080630 30.09 21.102 NaN 10 000568 20080930 26.00 30.769 NaN 

为什么? 如何获得df1的最后3行(没有索引的数据框)? pandas0.10.1

别忘了DataFrame.tail ! 例如df1.tail(10)

这是因为使用整数索引( ixselect-3以上的标签 ,而不是位置 ,这是devise的:参见pandas“gotchas” *)中的整数索引 。

*在较新版本的pandas中,首选loc或iloc来消除ix作为位置或标签的不明确性:

 df.iloc[-3:] 

看文档

正如Wes所指出的,在这个特定的情况下,你应该使用尾巴!

还应该注意的是,在0.14之前的ilociloc时访问IndexError ,而.head().tail()不会:

 >>> pd.__version__ '0.12.0' >>> df = pd.DataFrame([{"a": 1}, {"a": 2}]) >>> df.iloc[-5:] ... IndexError: out-of-bounds on slice (end) >>> df.tail(5) a 0 1 1 2 

旧答案(折旧方法):

您可以使用irows DataFrame方法来克服这种模糊性:

 In [11]: df1.irow(slice(-3, None)) Out[11]: STK_ID RPT_Date TClose sales discount 8 568 20080331 38.75 12.668 NaN 9 568 20080630 30.09 21.102 NaN 10 568 20080930 26.00 30.769 NaN 

注:系列有一个类似的iget方法 。