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

如何在Pandas中无需硬编码删除时间序列起始的前12小时数据

解决方案:删除时间序列前12小时数据

核心思路

因为需求是从首个数据点的绝对时间开始,删除之后12小时内的所有数据,between_time方法并不适用(它是按每日固定时间段筛选,比如"09:00"到"17:00"),正确的做法是基于首个数据点的时间戳计算出12小时后的分界点,再进行数据筛选。

完整实现步骤

  1. 确保索引为datetime类型:先把字符串格式的索引转换成pandas可识别的datetime类型,否则无法进行时间运算。
  2. 获取首个数据点的时间:直接取索引的第一个元素。
  3. 计算12小时后的分界时间:用首个时间加上pd.Timedelta(hours=12)得到截止时间。
  4. 筛选数据:保留索引大于分界时间的行。

代码示例

import pandas as pd

# 原始数据
df = pd.DataFrame({'quote_ts': ['2020-05-15 14:01:00.522517', 
                                '2020-05-15 14:01:00.599999', 
                                '2020-05-15 15:00:01.234517',
                                '2020-05-16 14:00:00.312518',
                                '2020-05-16 14:01:00.582517',
                                '2020-05-17 14:00:00.122983',
                                '2020-05-17 14:02:00.524567',
                                '2020-05-18 14:00:00.522517'],
                   'price': [1000, 1200, 1300, 1000, 1400, 1800, 1900, 1600]})

# 1. 转换索引为datetime类型并设置为索引
df['quote_ts'] = pd.to_datetime(df['quote_ts'])
df = df.set_index('quote_ts')

# 2. 获取首个数据点的时间
first_timestamp = df.index[0]

# 3. 计算12小时后的分界时间
cutoff_time = first_timestamp + pd.Timedelta(hours=12)

# 4. 筛选出分界时间之后的数据
filtered_df = df[df.index > cutoff_time]

print(filtered_df)

结果说明

运行后会保留2020-05-16 14:00:00.312518及之后的数据,正好是首个数据点(2020-05-15 14:01)12小时后的时间点之后的记录,完全符合需求。

通用适配

这个方案适用于任意结构的时间序列DataFrame,只要索引是datetime类型,不管首个数据点的日期时间是什么,都能准确计算并删除前12小时的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:30:53