
本文介绍如何将形如 {ticker: [dict, dict, ...]} 的嵌套字典结构高效转换为 Pandas DataFrame,并自动将顶层键(如股票代码)作为新列(如 'tick')注入每行数据。
本文介绍如何将形如 `{ticker: [dict, dict, ...]}` 的嵌套字典结构高效转换为 pandas dataframe,并自动将顶层键(如股票代码)作为新列(如 `'tick'`)注入每行数据。
在金融或时间序列数据处理中,常遇到以股票代码(如 'NVDA', 'MSFT')为键、对应多个行情记录(字典列表)为值的嵌套结构。目标是将其展平为标准二维表格,其中每行包含原始字段('open', 'high', 'low', 'close')外加一个标识列(如 'tick'),便于后续分组分析、可视化或建模。
最简洁高效的实现方式是使用列表推导式配合字典解包(**v),一次性构造出 pd.DataFrame 可直接解析的字典列表:
import pandas as pd
df = pd.DataFrame([
{"tick": ticker, **record}
for ticker, records in data.items()
for record in records
])
✅ 关键说明:
- 外层循环
for ticker, records in data.items()遍历顶层键值对; - 内层循环
for record in records展开每个股票对应的字典列表; -
{"tick": ticker, **record}将股票代码作为新键注入每个记录字典,确保字段对齐; -
pd.DataFrame(...)直接接收该字典列表,自动推断列名并填充数据。
⚠️ 注意事项:
- 所有子字典必须具有完全一致的键集(如均含
'open','high','low','close'),否则缺失字段将被填充为NaN; - 若数据量极大(如百万级记录),该方法会生成中间列表,占用额外内存;此时可考虑
pd.concat()分块构建或使用polars等更省内存的替代方案; - 列名
"tick"可按需替换为"symbol"、"stock"等语义化名称,保持与业务上下文一致。
最终生成的 df 具有清晰的长格式结构,天然支持 df.groupby('tick')、df.pivot_table(..., columns='tick') 等操作,是进行多资产横向对比分析的理想输入格式。










