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

如何将含字典列表的字典转换为带顶级键列的DataFrame

把股票字典转换为带tick列的DataFrame

下面提供三种实用方法,都能将你给出的字典结构转换成目标格式的DataFrame:

方法1:逐个处理后合并(直观易懂)

对每个股票代码,先把对应的数据列表转成临时DataFrame,添加tick列后,再合并所有临时表。

import pandas as pd
import random

# 生成你提供的示例数据
ticks = ['NVDA', 'MSFT', 'AAPL']
data = {}

for s in ticks:
    data[s] = []
    for _ in range(5):
        entry = {
            'open': round(random.uniform(100, 250), 2),
            'high': round(random.uniform(100, 250), 2),
            'low': round(random.uniform(100, 250), 2),
            'close': round(random.uniform(100, 250), 2)
        }
        data[s].append(entry)

# 转换为目标DataFrame
temp_dfs = []
for tick, daily_data in data.items():
    df_temp = pd.DataFrame(daily_data)
    df_temp['tick'] = tick
    temp_dfs.append(df_temp)

# 合并并重置索引,调整列顺序
final_df = pd.concat(temp_dfs, ignore_index=True)
final_df = final_df[['tick', 'open', 'high', 'low', 'close']]
print(final_df)

方法2:用explode快速展开(简洁高效)

先把字典转成包含列表的DataFrame,再展开列表并拆分字典列,一步到位。

import pandas as pd
import random

# 生成示例数据
ticks = ['NVDA', 'MSFT', 'AAPL']
data = {}

for s in ticks:
    data[s] = []
    for _ in range(5):
        entry = {
            'open': round(random.uniform(100, 250), 2),
            'high': round(random.uniform(100, 250), 2),
            'low': round(random.uniform(100, 250), 2),
            'close': round(random.uniform(100, 250), 2)
        }
        data[s].append(entry)

# 转换步骤
df = pd.DataFrame.from_dict(data, orient='index', columns=['daily_data']).reset_index(names='tick')
df = df.explode('daily_data')
final_df = pd.concat([df['tick'], df['daily_data'].apply(pd.Series)], axis=1)
print(final_df)

方法3:手动构建数据列表(无依赖高级API)

先把所有数据整理成统一的字典列表,再直接转成DataFrame,适合对pandas不熟悉的场景。

import pandas as pd
import random

# 生成示例数据
ticks = ['NVDA', 'MSFT', 'AAPL']
data = {}

for s in ticks:
    data[s] = []
    for _ in range(5):
        entry = {
            'open': round(random.uniform(100, 250), 2),
            'high': round(random.uniform(100, 250), 2),
            'low': round(random.uniform(100, 250), 2),
            'close': round(random.uniform(100, 250), 2)
        }
        data[s].append(entry)

# 手动构建完整数据列表
full_data = []
for tick, daily_entries in data.items():
    for entry in daily_entries:
        full_data.append({'tick': tick, **entry})

final_df = pd.DataFrame(full_data)
print(final_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:57:25