You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含DatetimeIndex的时序排序Pandas DataFrame进行切片?

对含DatetimeIndex的Pandas DataFrame进行切片操作的方法

既然你的DataFrame已经按时间顺序排好序了,那针对带DatetimeIndex的DataFrame,有几种非常方便的切片方式,我给你一一说明:

  • 直接用时间字符串做区间切片
    因为你的索引是排序后的DatetimeIndex,Pandas支持直接用时间字符串的区间来选取行,语法和普通切片类似,而且是包含两端的。比如你想选取2011年4月1日02:00到03:00之间的所有数据,直接写:

    df['2011-04-01 02:00':'2011-04-01 03:00']
    

    甚至可以简化到日期或小时级别,比如选当天所有数据:df['2011-04-01'],或者选某个小时段:df['2011-04-01 02':'2011-04-01 03']。

  • 用.loc做精准标签切片
    如果需要更明确的标签索引(推荐用这种,可读性更强),可以用.loc搭配时间区间:

    df.loc['2011-04-01 02:03':'2011-04-01 02:44']
    

    这个会精准返回从2011-04-01 02:03:00到2011-04-01 02:44:00的所有行,刚好对应你示例里的那三行数据。

  • 基于时间组件的专用方法
    Pandas提供了一些针对时间索引的专用方法,比如between_time可以按一天内的时间段筛选:

    # 选取每天02:00到02:59之间的数据
    df.between_time('02:00', '02:59')
    

    还有at_time可以选取某个具体时间点的数据(如果索引中存在该时间):

    df.at_time('02:38:00')
    
  • 布尔条件过滤(灵活组合)
    如果需要更复杂的筛选逻辑,比如结合时间和数值条件,可以直接用布尔索引:

    # 筛选时间晚于02:30且数值大于0的行
    df[(df.index > '2011-04-01 02:30') & (df[0] > 0)]
    

最后提醒一下:这些方法之所以好用,前提是你的DatetimeIndex是单调递增排序的,你可以用df.index.is_monotonic_increasing来确认,如果返回True就没问题;如果没排序,记得先执行df = df.sort_index()再做切片哦。

内容的提问来源于stack exchange,提问作者wmatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:47:53