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

Python中如何将嵌套字典的键作为列值转换Alpaca API数据

解决Alpaca API历史数据转表格格式的问题

你的原始数据结构是外层以ticker为键、对应值为K线数据列表的字典,直接用pd.json_normalize(my_data)无法得到预期结果——因为该方法默认处理列表型数据或字段式嵌套字典,而非以ticker为分组键的结构。以下是两种可行的解决方案:

方法一:手动遍历添加ticker字段

直接遍历原始字典,给每条K线数据补上对应的ticker标识,再转换为DataFrame:

import pandas as pd

# 示例原始数据
raw_data = {
    'SPY': [{'t': '2022-01-03T05:00:00Z', 'o': 476.3, 'h': 477.15, 'l': 472.67, 'c': 477.13, 'v': 80931566}],
    'AAPL': [{'t': '2022-01-03T05:00:00Z', 'o': 177.83, 'h': 182.88, 'l': 177.71, 'c': 182.01, 'v': 104487938}]
}

processed_rows = []
for ticker, bar_list in raw_data.items():
    for bar in bar_list:
        bar['ticker'] = ticker
        processed_rows.append(bar)

# 转换为表格并调整列顺序
df = pd.DataFrame(processed_rows)
df = df[['ticker', 't', 'o', 'h', 'l', 'c', 'v']]

方法二:结合json_normalize与concat

如果K线数据存在更深层次的嵌套结构,可先用json_normalize解析单ticker的数据,再统一添加ticker字段并合并:

import pandas as pd

raw_data = {
    'SPY': [{'t': '2022-01-03T05:00:00Z', 'o': 476.3, ...}],
    'AAPL': [{'t': '2022-01-03T05:00:00Z', 'o': 177.83, ...}]
}

df_list = []
for ticker, bar_list in raw_data.items():
    # 解析单ticker的嵌套数据
    ticker_df = pd.json_normalize(bar_list)
    # 添加ticker列
    ticker_df['ticker'] = ticker
    df_list.append(ticker_df)

# 合并所有ticker的表格并调整列顺序
final_df = pd.concat(df_list, ignore_index=True)
final_df = final_df[['ticker', 't', 'o', 'h', 'l', 'c', 'v']]

两种方法最终都会生成包含ticker、t、o等列的表格,每行对应一条K线数据,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:10:18