如何将嵌套字典结构转换为指定格式的Pandas DataFrame
问题描述
我想将如下结构的字典转换为Pandas DataFrame:
{'123': [ {'feature_1':'a1','feature_2':'b1',...},{'feature_1':'a2','feature_2':'b2',...},...,{'feature_1':'an','feature_2':'bn'} ],... }
我当前的尝试代码如下:
df = pd.DataFrame.from_dict({(key, lis_index, sub_key): data[key][lis_index][sub_key] for key in data.keys() for lis_index in range(len(data[key])) for sub_key in data[key][lis_index].keys()}, orient='index')
其中data为目标字典,但转换后得到两列:一列是三元组索引,另一列是值列。我需要转换为如下格式的DataFrame:
| key | feature_1 | feature_2 | ... | feature_n |
|---|---|---|---|---|
| 123 | a1 | b1 | ... | z1 |
| 123 | a2 | b2 | ... | z2 |
| ... | ... | ... | ... | ... |
| 123 | an | bn | ... | zn |
解决方案
不需要用这么复杂的字典推导式,更简洁高效的做法是遍历字典的键值对,将每个列表内的字典转为DataFrame并添加key列,最后合并所有结果:
import pandas as pd dfs = [] for key, items in data.items(): # 将当前key对应的字典列表转为DataFrame temp_df = pd.DataFrame(items) # 添加key列,值为当前字典的键 temp_df['key'] = key dfs.append(temp_df) # 合并所有临时DataFrame并重置索引 final_df = pd.concat(dfs, ignore_index=True) # 调整列顺序,把key列移到最前面 final_df = final_df[['key'] + [col for col in final_df.columns if col != 'key']]
代码说明
- 遍历字典的每个键(如
'123')及其对应的字典列表; - 直接将列表转为DataFrame,自动生成
feature_1、feature_2等列; - 为临时DataFrame新增
key列,统一填充当前遍历的字典键; - 收集所有临时DataFrame后,用
pd.concat合并为一个完整的DataFrame; - 调整列顺序,让
key列处于最前方,匹配需求格式。
这种方法逻辑直观,代码易读,不会生成多余的索引列,运行效率也更高。
内容的提问来源于stack exchange,提问作者stamoyo
相关产品推荐
相关产品推荐

