如何获取pandas DataFrame的最后N行?

242 投票
4 回答
455968 浏览
提问于 2025-04-17 14:32

我有一个名为 df1 的 pandas 数据框:

    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.ix[-3:],但是它却返回了所有的行。为什么会这样呢?我该怎么才能得到 df1 的最后三行呢?我使用的是 pandas 0.10.1 版本。

4 个回答

14

如何获取pandas DataFrame的最后N行?

如果你是通过位置来切片的话,使用__getitem__(也就是用[]来切片)效果很好,这是我找到的最简洁的解决方案。

pd.__version__
# '0.24.2'

df = pd.DataFrame({'A': list('aaabbbbc'), 'B': np.arange(1, 9)})
df

   A  B
0  a  1
1  a  2
2  a  3
3  b  4
4  b  5
5  b  6
6  b  7
7  c  8

df[-3:]

   A  B
5  b  6
6  b  7
7  c  8

这和调用df.iloc[-3:]是一样的,比如说(iloc内部实际上是调用__getitem__)。


另外,如果你想要找到每个组的最后N行,可以使用groupbyGroupBy.tail

df.groupby('A').tail(2)

   A  B
1  a  2
2  a  3
5  b  6
6  b  7
7  c  8
112

这是因为使用了整数索引(ix是通过标签来选择那些索引,而不是通过位置,这是设计使然:可以查看pandas中的整数索引注意事项)。

*在新版的pandas中,建议使用loc或iloc来消除ix在位置或标签上的模糊性:

df.iloc[-3:]

可以查看文档

正如Wes所指出的,在这个特定情况下,你只需使用tail就可以了!

556

别忘了使用 DataFrame.tail!比如说 df1.tail(10) 这个命令。

撰写回答