如何将嵌套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
相关产品推荐
相关产品推荐

