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

如何将嵌套Python字典转换为指定格式的Pandas DataFrame?

嵌套字典转指定字段Pandas DataFrame的解决方案

问题背景

给定嵌套结构的Python字典main_dict,需要提取symbol、last_price、net_change、Open、High、Low、Close这几个字段转换为Pandas DataFrame。直接使用pd.DataFrame.from_dict(main_dict)会因嵌套结构(如ohlc子字典)导致字段无法正确映射,最终结果不符合需求。

解决方案

方法一:手动提取字段构造数据列表

这种方法直接遍历字典,按需提取目标字段,构造符合DataFrame要求的字典列表,逻辑清晰且灵活。

import pandas as pd

main_dict = {
    'NSE:ACC': {'average_price': 0,
                'buy_quantity': 0,
                'depth': {'buy': [{'orders': 0, 'price': 0, 'quantity': 0}] * 5,
                          'sell': [{'orders': 0, 'price': 0, 'quantity': 0}] * 5},
                'instrument_token': 5633,
                'last_price': 2488.9,
                'last_quantity': 0,
                'last_trade_time': '2022-09-23 15:59:10',
                'lower_circuit_limit': 2240.05,
                'net_change': 0,
                'ohlc': {'close': 2555.7,
                         'high': 2585.5,
                         'low': 2472.2,
                         'open': 2575},
                'oi': 0,
                'oi_day_high': 0,
                'oi_day_low': 0,
                'sell_quantity': 0,
                'timestamp': '2022-09-23 18:55:17',
                'upper_circuit_limit': 2737.75,
                'volume': 0},
}

# 遍历字典提取目标字段
data_rows = []
for symbol, stock_details in main_dict.items():
    data_rows.append({
        'symbol': symbol,
        'last_price': stock_details['last_price'],
        'net_change': stock_details['net_change'],
        'Open': stock_details['ohlc']['open'],
        'High': stock_details['ohlc']['high'],
        'Low': stock_details['ohlc']['low'],
        'Close': stock_details['ohlc']['close']
    })

# 转换为DataFrame
result_df = pd.DataFrame(data_rows)
print(result_df)

执行后输出:

symbol  last_price  net_change   Open    High     Low   Close
0  NSE:ACC      2488.9           0  2575.0  2585.5  2472.2  2555.7

方法二:使用pd.json_normalize展开嵌套字段

利用Pandas内置的json_normalize工具自动展开嵌套字典,再筛选并重命名目标字段,适合嵌套结构复杂的场景。

import pandas as pd

# 展开嵌套字典生成初始DataFrame
normalized_df = pd.json_normalize(main_dict.values())
# 添加symbol列(从原字典的键中提取)
normalized_df['symbol'] = list(main_dict.keys())

# 筛选需要的列并重新命名
target_columns = {
    'symbol': 'symbol',
    'last_price': 'last_price',
    'net_change': 'net_change',
    'ohlc.open': 'Open',
    'ohlc.high': 'High',
    'ohlc.low': 'Low',
    'ohlc.close': 'Close'
}
result_df = normalized_df[list(target_columns.keys())].rename(columns=target_columns)
print(result_df)

执行后输出与方法一完全一致。

方法对比

  • 方法一:代码直观,可灵活处理特殊字段(如需要计算或转换的字段),适合字段需求明确的简单场景。
  • 方法二:无需手动遍历嵌套结构,适合字典层级多、字段复杂的情况,减少重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:25:24