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

如何从pandas dataframe中生成指定维度的minibatch训练数据?

实现步骤

你手里的是金融量化场景常见的长表格式数据,要转换为指定shape的三维训练张量,按以下步骤实现即可:

1. 依赖引入与模拟数据构造

先构造和你描述结构一致的源数据方便测试,你可以直接替换成自己的真实DataFrame:

import pandas as pd
import numpy as np

# 模拟源数据(你可以直接替换为自己的df)
dates = pd.date_range(start="2012-01-01", end="2012-01-10")
etfs = ["A00033", "A00034"]
data_names = ["open", "high", "low", "close", "volume"]

df_list = []
for date in dates:
    for etf in etfs:
        for dn in data_names:
            val = np.random.rand()*10 if dn != "volume" else np.random.randint(1000, 10000)
            df_list.append({"date": date, "etf": etf, "data_name": dn, "value": val})
df = pd.DataFrame(df_list)

2. 长表转宽表对齐数据

先把零散的长表数据按日期、标的、数据维度对齐,保证维度顺序固定:

# 先按日期、标的升序排序,避免时序/标的顺序错乱
df = df.sort_values(by=["date", "etf"], ignore_index=True)

# 长表转宽表,索引为日期,列二级索引分别是数据维度、标的代码
pivot_df = df.pivot(
    index="date",
    columns=["data_name", "etf"],
    values="value"
)
# 固定5个数据维度的顺序,避免乱序
pivot_df = pivot_df.reindex(
    columns=["open", "high", "low", "close", "volume"],
    level="data_name"
)

3. 生成滑动窗口并调整维度

按指定回溯窗口生成切片,调整为要求的维度格式:

# 自定义参数
lookback = 5  # 训练回溯周期,可自行修改
n_channel = 5
n_assets = len(etfs)  # 自动取标的总数,也可手动指定

# 转numpy数组,shape为(总日期数, n_channel * n_assets)
arr = pivot_df.values
# 生成滑动时间窗口,shape为(样本数, lookback, n_channel * n_assets)
windowed_arr = np.lib.stride_tricks.sliding_window_view(
    arr, window_shape=lookback, axis=0
).transpose(0, 2, 1)

# 调整维度为(样本数, n_channel, lookback, n_assets)
# 单个样本的shape即为(n_channel, lookback, n_assets),符合要求
dataset = windowed_arr.reshape(-1, lookback, n_channel, n_assets).transpose(0, 2, 1, 3)

# 验证维度,第一个样本输出应为(5, 5, 2),对应(n_channel, lookback, n_assets)
print(dataset[0].shape)

注意事项

  • 缺失值处理:如果源数据存在缺失,可在pivot操作后通过fillna()、dropna()做清洗,避免无效样本
  • 标的顺序:如果需要固定标的排序规则,可在pivot后通过reindex(level="etf", columns=固定标的列表)指定顺序
  • 批量采样:如果需要生成minibatch,直接按第一维(样本维度)切片即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:18:03