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

如何基于Datetime索引对Pandas DataFrame进行切片

嘿,针对带Datetime索引的Pandas DataFrame切片,我有几个实用的方法分享给你,都是日常处理时间序列数据常用的:

1. 直接用日期字符串快速切片(最省心)

如果你的DataFrame索引已经是DatetimeIndex类型,直接用年份、月份或者日期范围的字符串就能切片,非常直观:

  • 提取2008年全年的数据:
    df['2008']
    
  • 提取2008年8月到2009年3月的区间数据:
    df['2008-08':'2009-03']
    
  • 提取某一天的数据(如果你的索引包含具体时间的话):
    df['2009-03-01']
    

注意:如果你的索引还不是Datetime类型,先执行df.index = pd.to_datetime(df.index)转换一下,不然这些方法用不了哦

2. 用loc做精确切片(更严谨)

loc方法适合需要明确范围的场景,避免歧义:

  • 提取2009年1月1日及之后的所有数据:
    df.loc['2009-01-01':]
    
  • 提取2008年10月到2009年5月的精准区间:
    df.loc['2008-10-01':'2009-05-01']
    

如果你的索引包含时分秒,还可以精确到时间点:

df.loc['2009-03-01 00:00:00':'2009-04-01 23:59:59']
3. 按时间属性筛选(灵活度高)

如果需要按年份、月份、季度这类时间组件筛选,可以直接调用索引的属性:

  • 提取所有8月份的数据:
    df[df.index.month == 8]
    
  • 提取2009年的数据:
    df[df.index.year == 2009]
    
  • 提取2008年下半年(7-12月)的数据:
    df[(df.index.year == 2008) & (df.index.month >= 7)]
    
4. 复杂时间范围用date_range或between_time

如果需要自定义频率的时间范围,比如每月第一天的数据,或者特定时间段的数据:

  • 生成指定频率的日期列表,再筛选:
    target_dates = pd.date_range('2008-08-01', '2010-03-01', freq='M')
    df[df.index.isin(target_dates)]
    
  • 如果是小时级别的数据,提取每天9点到17点的内容:
    df.between_time('09:00', '17:00')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:20:53