pandas按Sessions分组重采样1分钟K线为60分钟时触发AttributeError问题
报错原因
你的代码仅完成了分组+重采样的初始化操作,返回的是DatetimeIndexResamplerGroupby中间对象,没有指定聚合规则生成最终DataFrame,所以后续操作时会触发属性不存在的报错。同时该写法未做冗余字段裁剪,不适合3.5亿行规模的大数据处理。
正确实现代码
# 第一步:提前丢弃不需要的字段,大幅降低内存占用,这一步对超大数据集至关重要 df = df[['Sessions', 'Symbol', 'Time', 'Open', 'High', 'Low', 'Close']] # 第二步:执行分组重采样+符合业务逻辑的聚合 resampled_df = ( df.groupby("Sessions", group_keys=False) .resample( '60Min', label='right', on='Time', offset='30min', # 适配9:30开盘规则,让第一个窗口结束时间对齐10:00 closed='right' # 匹配右边界包含的时段统计规则 ) .agg( Symbol=('Symbol', 'first'), Time=('Time', 'max'), Open=('Open', 'first'), High=('High', 'max'), Low=('Low', 'min'), Close=('Close', 'last') ) .reset_index(drop=True) )
3.5亿行超大规模数据效率优化建议
- 优先使用pandas 2.0及以上版本,读取数据时指定pyarrow作为后端,内存占用可降低70%以上,运算速度提升数倍:
df = pd.read_csv("行情数据路径.csv", engine='pyarrow', dtype_backend='pyarrow') - 若内存不足以放下全量数据,可按
Sessions字段分批次读取处理,每处理完一批就写入磁盘,避免内存溢出。 - 可替换为polars库处理该场景,语法和pandas高度兼容,相同硬件下运算速度是pandas的5-10倍,内存占用更低。
内容的提问来源于stack exchange,提问作者Trippy Dippy
相关产品推荐
相关产品推荐

