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

使用pandas堆叠DataFrame至第三维度(Panel已弃用)的问题排查

问题解决方案

问题根源

  • Pandas的Panel结构确实已在0.20.0版本正式弃用,目前官方推荐使用带MultiIndex的二维DataFrame或者xarray库实现类似三维数据的管理需求。
  • 你现有代码的错误有两点:
    1. 数据预处理时没有将OpenTime时间列设置为行索引,concat后生成的MultiIndex仅包含股票代码一个维度,内层是无意义的默认整数索引,无法实现按时间维度切片
    2. 需确认stockTicker列表的长度、顺序和你遍历的files列表完全匹配,否则股票代码索引会和对应数据错位

修复代码

第一步:修改prepData函数,将时间列设为索引

def prepData(dataloc):
    inputData = pd.read_csv(dataloc)
    inputData.columns = ["OpenTime","Open","High","Low","Close"]
    # 转换时间格式并设为索引
    inputData['OpenTime'] = pd.to_datetime(inputData['OpenTime'])
    inputData = inputData.set_index('OpenTime')
    return inputData

第二步:concat时指定索引名称,生成双层MultiIndex

for x in files:
    dataloc = datalocation + x
    rawinputData.append(prepData(dataloc))
# 确保stockTicker顺序和files顺序完全一致
inputdata = pd.concat(rawinputData, keys=stockTicker, names=['StockTicker', 'OpenTime'])

常用切片操作示例

现在得到的inputdata虽然shape显示为二维,但通过双层MultiIndex可以实现所有你需要的三维切片需求:

  • 查询所有股票所有时间点的Open价格:inputdata['Open']
  • 查询指定时间点所有股票的Open价格:inputdata.xs('2024-01-01', level='OpenTime')['Open']
  • 查询指定股票所有时间点的全部价格数据:inputdata.loc['目标股票代码']
  • 如果需要使用原生三维结构,可以转换为xarray对象:xr_data = inputdata.to_xarray()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:57:03