Pandas如何实现DataFrame从末尾起始按范围切片的tail负索引效果
pandas 从DataFrame末尾按指定范围切片的实现方法
pandas 原生的.tail()方法仅支持传入整数参数,不支持直接传入切片语法实现区间截取,要实现从末尾计数提取指定行范围的效果,最通用稳定的方案是使用.iloc位置索引配合负索引切片。
- 核心实现方式
直接调用df.iloc[-4:-1]即可得到你预期的结果。pandas负位置索引的计数规则是从DataFrame末尾往前计数:-1代表最后一行,-4代表倒数第4行;切片遵循左闭右开规则,因此-4:-1的取值范围就是从倒数第4行开始,到倒数第1行之前结束,刚好覆盖你需要的索引1、2、3对应的三行数据。
完整可运行测试代码如下:
import pandas as pd # 构建示例DataFrame df = pd.DataFrame({'c1':[1,2,3,4,5],'c2':['one','two','three','four','five']}) # 按位置做负索引切片 result = df.iloc[-4:-1] print(result)
运行输出和你预期的结果完全一致:
c1 c2 1 2 two 2 3 three 3 4 four
- 补充说明
如果你的DataFrame始终保持从0开始的连续整数默认行索引,也可以直接用df[1:4]实现相同效果,但这种写法依赖行索引的标签值,一旦DataFrame经过筛选、拼接、分组等操作导致索引断层、不连续,就会返回不符合预期的结果,日常使用更推荐.iloc按位置切片的写法,鲁棒性更强。
你设想的.tail(-4:-1)写法无法直接运行的原因是:.tail()仅接受整数入参,传入正整数时返回末尾n行,传入负整数时返回剔除前|n|行后的所有剩余行,不支持传入切片对象做细粒度范围筛选。
内容的提问来源于stack exchange,提问作者ThatQuantDude
相关产品推荐
相关产品推荐

