You need to enable JavaScript to run this app. Pandas DataFrame指定行范围的datetime索引1小时偏移实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame指定行范围的datetime索引1小时偏移实现方法

失效原因

原有代码两处写法都无法生效的原因:

  • 直接修改布尔索引返回的临时副本的索引,修改不会同步到原DataFrame
  • 注释的shift写法是把筛选后的偏移索引赋值给整个DataFrame的索引,会导致时间范围外的索引变为缺失值,不符合需求

可用实现代码

以下写法不依赖索引的freq属性,即使索引freq为None也可正常运行:

import pandas as pd

# 你的原有数据构造逻辑
df = pd.DataFrame()
df['datetime'] = pd.date_range(start='2016-01-01', end='2019-01-01', freq='30T')
df = df.set_index('datetime')

# 定义目标时间范围
date_start = '2016-01-01 00:00:00'
date_end = '2016-03-02 23:49:50'
# 构造筛选掩码
shift_mask = (df.index >= date_start) & (df.index <= date_end)
# 条件替换索引
df.index = df.index.where(~shift_mask, df.index + pd.Timedelta('1H'))

# 若偏移后索引顺序混乱,可追加排序操作
# df = df.sort_index()

逻辑说明

  • 用where方法做条件替换:不符合偏移条件的行保留原有索引,符合条件的行替换为加1小时后的索引
  • 直接对原索引整体赋值,不存在修改副本不生效的问题
  • 仅依赖索引的datetime类型属性,不需要索引设置固定freq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:54:02