如何获取pandas DataFrame的最后N行?
我有一个名为 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行,可以使用groupby
和GroupBy.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)
这个命令。