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

如何在Python中将DataFrame内的字典嵌套列表转为键表头表格

问题:如何将嵌套字典列表展开为结构化DataFrame?

我已有如下数据:

results
df = pd.DataFrame(results)
df

输出结果:

results:
farm_power_output   farm_unwaked_power_output   farm_wind_direction flow_case_id    id  measurement_set_id  met_mast_results    simulation_id   timestamp         turbine_results
0   80348100.0  81027200.0  2.63545 00001WS11.6dir151.0 34875   None    [{'air_density': 1.20526, 'id': 28962, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631357, 'insta...
1   80200300.0  81226300.0  3.14159 00008WS11.7dir180.0 34876   None    [{'air_density': 1.20526, 'id': 28963, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631369, 'insta...
2   62370800.0  67676300.0  3.03687 00006WS10.1dir174.0 34877   None    [{'air_density': 1.20526, 'id': 28964, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631381, 'insta...
3   40375100.0  43515300.0  2.56563 00000WS8.6dir147.0  34878   None    [{'air_density': 1.20526, 'id': 28965, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631393, 'insta...
4   79935100.0  81509900.0  2.82743 00004WS12.4dir162.0 34879   None    [{'air_density': 1.20526, 'id': 28966, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631405, 'insta...
5   73799100.0  77291300.0  3.10669 00007WS10.8dir178.0 34880   None    [{'air_density': 1.20526, 'id': 28967, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631417, 'insta...
6   81055200.0  81348000.0  2.70526 00003WS12.0dir155.0 34881   None    [{'air_density': 1.20526, 'id': 28968, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631429, 'insta...
7   54173400.0  66155700.0  2.89725 00005WS10.0dir166.0 34882   None    [{'air_density': 1.20526, 'id': 28969, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631441, 'insta...
8   71949100.0  74568800.0  2.67035 00002WS10.6dir153.0 34883   None    [{'air_density': 1.20526, 'id': 28970, 'instan...   3zznris223wxkeimi9jrkg2n    None    [{'air_density': 1.20526, 'id': 631453, 'insta...

我执行了以下代码:

df1 = df.turbine_results
df1

得到如下结果:

df1 : 
0    [{'air_density': 1.20526, 'id': 631357, 'insta...
1    [{'air_density': 1.20526, 'id': 631369, 'insta...
2    [{'air_density': 1.20526, 'id': 631381, 'insta...
3    [{'air_density': 1.20526, 'id': 631393, 'insta...
4    [{'air_density': 1.20526, 'id': 631405, 'insta...
5    [{'air_density': 1.20526, 'id': 631417, 'insta...
6    [{'air_density': 1.20526, 'id': 631429, 'insta...
7    [{'air_density': 1.20526, 'id': 631441, 'insta...
8    [{'air_density': 1.20526, 'id': 631453, 'insta...
Name: turbine_results, dtype: object

但我期望得到如下格式的表格:

turbine_results : 
air_density     id    instance_id        power    rotor_wind_speed  turbulence_intensity    unwked_power    wake_speed_factor
1.20526       631357        3         6752270.0   11.5226         0.1                   6752270.0       1.0
1.20526       631358        6         6751830.0   11.5196         0.2                   6752270.0       0.999739
1.20526       631369        3         6768860.0   11.6919         0.3                   6768860.0       1.0
1.20526       631370        2         6768600.0   11.6877         0.4                   6768600.0       0.99645
1.20526       631381        3         5639690.0   10.0387         0.5                   5639690.0       1.0
1.20526       631382        2         5658480.0   10.0382         0.6                   5658480.0       0.999954
1.20526       631393        3         3626270.0   8.53487         0.7                   3626270.0       1.0
1.20526       631394        6         3628910.0   8.53459         0.8                   3628910.0       0.99967
1.20526       631405        3         6792490.0   12.3093         0.9                   6792490.0       1.0

请问如何实现将该字典嵌套列表展开为以键名为表头的结构化表格?


解决方案

方法一:使用explode + json_normalize

先将turbine_results列中的列表展开为多行,再将每行的字典解析为结构化列:

# 展开列表为多行
exploded_df = df.explode('turbine_results')
# 解析字典为结构化DataFrame
turbine_df = pd.json_normalize(exploded_df['turbine_results'])
# 查看结果
print(turbine_df)

如果需要保留原DataFrame的其他列,可以合并数据:

final_df = pd.concat([exploded_df.drop('turbine_results', axis=1), turbine_df], axis=1)

方法二:使用列表推导式直接收集所有字典

遍历所有行的turbine_results列表,收集所有嵌套字典后转为DataFrame:

# 收集所有嵌套字典数据
all_turbine_data = [item for sublist in df['turbine_results'] for item in sublist]
# 转为结构化DataFrame
turbine_df = pd.DataFrame(all_turbine_data)
# 查看结果
print(turbine_df)

两种方法都能生成你期望的结构化表格,可根据是否需要保留原表其他列选择对应方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:50:26