如何将DataFrame按每1000行切片后存入新DataFrame各列
Pandas 按行切分数据块并转为新DataFrame列的实现方法
核心思路
针对100万行刚好可被1000整除的时间序列数据,优先使用numpy向量化维度转换实现,避免低效率的循环切片,最终输出1000行、1000列的新DataFrame,每一列对应一个1000行的原始数据块。
实现步骤
- 先校验原始数据行数,确认可被切分块大小整除,避免数据错位
- 提取目标列的数值数组,通过reshape直接做维度重组
- 数组转置后生成新DataFrame,按需设置列名即可
代码示例
import pandas as pd import numpy as np # df 为你持有的100万行原始时间序列DataFrame,假设目标数值列名为 ts chunk_size = 1000 # 行数校验,若存在尾部不足1000行的残块,可提前选择补值或丢弃 assert len(df) % chunk_size == 0, "数据行数无法被块大小整除,请先处理尾部残块" # 核心转换:纯向量化操作无循环,处理百万行数据耗时毫秒级 chunk_array = df["ts"].to_numpy().reshape(-1, chunk_size).T # 生成新DataFrame,列名按block_0 到 block_999 规则命名 new_df = pd.DataFrame( chunk_array, columns=[f"block_{idx}" for idx in range(chunk_array.shape[1])] )
注意事项
- 不要使用
for循环逐块切片再拼接列的写法,数据量较大时循环的性能开销会非常高 - 如果原始DataFrame包含多列字段,不建议强行压缩到单列存储,可改用多层索引DataFrame或块列表的形式保存,避免丢失结构化信息
- 如果需要追溯每个块对应的原始时间范围,可单独生成块元信息表,记录每个列名对应的原始数据起止索引即可
内容的提问来源于stack exchange,提问作者toben aus
相关产品推荐
相关产品推荐

