如何基于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
相关产品推荐
相关产品推荐

