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

分块读取大CSV时间序列resample时如何避免切分15分钟统计区间

分块读取时间序列CSV解决重采样边界拆分问题

核心思路

通过缓存每个分块末尾未结束的15分钟区间数据,和下一分块合并后再做重采样,避免统计区间被拆分。

补全后完整代码

import pandas as pd

source_file = './timeseries.csv'
chunksize = 10 ** 6
# 初始化缓存变量,存储上一分块末尾不完整的15分钟区间数据
buffered_chunk = pd.DataFrame()

for chunk in pd.read_csv(
        source_file, 
        chunksize=chunksize, 
        delimiter=';',
        decimal=',',
        na_values='.',
        index_col=0, 
        parse_dates=[0,]):

    # 切出当前分块中所有属于完整15分钟区间的部分
    closed_15min_chunk = chunk[chunk.index < chunk.index[-1].floor('15min')]

    # 注意修正原代码的变量名拼写错误:closed15_min_chunk 改为 closed_15min_chunk
    usable_chunk = pd.concat([buffered_chunk, closed_15min_chunk])

    # 缓存当前分块末尾不完整的15分钟区间数据,留到下一分块合并
    buffered_chunk = chunk[chunk.index >= chunk.index[-1].floor('15min')]

    if not usable_chunk.empty:
        avg_chunk = usable_chunk.resample('15min').mean().round(2)
        max_chunk = usable_chunk.resample('15min').max().round(2)
        print(avg_chunk)

# 循环结束后处理最后剩余的不完整区间数据
if not buffered_chunk.empty:
    avg_last = buffered_chunk.resample('15min').mean().round(2)
    max_last = buffered_chunk.resample('15min').max().round(2)
    print(avg_last)

逻辑说明

  • floor('15min')方法会将任意时间戳对齐到其所属15分钟区间的起始时间,例如12:08:34会对齐到12:00:00,12:17:22会对齐到12:15:00
  • 所有早于当前分块最后一个时间戳所属15分钟区间起始的行,都属于已经结束的完整统计区间,可以直接参与本次计算
  • 剩余属于未结束区间的行存入缓存,和下一个分块的数据合并后再统计,完全避免区间被拆分的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:15:06