如何将字典列表转换为DataFrame?附示例数据及期望输出
实现方案:将嵌套字典列表转换为指定格式DataFrame
假设你的原始数据结构类似这样(部分box是单个字典,部分是字典列表):
list_of_dict = [ {"id": 1, "name": "A", "box": {"x": 10, "y": 20, "w": 30}}, {"id": 2, "name": "B", "box": [{"x": 15, "y": 25, "w": 35}, {"x": 40, "y": 50, "w": 60}]}, {"id": 3, "name": "C", "box": {"x": 70, "y": 80, "w": 90}} ]
目标是把每个box条目拆成单独一行,同时保留原数据的其他字段,最终生成结构规整的DataFrame。
方法一:列表推导式扁平化(直观易理解)
通过遍历原始数据,先统一box的格式为列表,再逐个展开合并字段:
import pandas as pd # 1. 扁平化数据 flattened_data = [] for item in list_of_dict: # 统一box为列表:如果是单个字典就转成单元素列表 boxes = item["box"] if isinstance(item["box"], list) else [item["box"]] # 每个box生成一条记录,合并原字段和box字段 for box in boxes: merged_item = {**item, **box} del merged_item["box"] # 删除原box字段避免重复 flattened_data.append(merged_item) # 2. 转换为DataFrame df = pd.DataFrame(flattened_data) print(df)
输出结果:
id name x y w 0 1 A 10 20 30 1 2 B 15 25 35 2 2 B 40 50 60 3 3 C 70 80 90
方法二:Pandas函数式处理(更简洁)
利用Pandas的explode和apply(pd.Series)实现展开:
import pandas as pd # 1. 先转为初始DataFrame,统一box为列表格式 df = pd.DataFrame(list_of_dict) df["box"] = df["box"].apply(lambda x: x if isinstance(x, list) else [x]) # 2. 展开box列表为多行 df_exploded = df.explode("box", ignore_index=True) # 3. 将box字典展开为独立列,合并到原DataFrame df_final = pd.concat([df_exploded.drop("box", axis=1), df_exploded["box"].apply(pd.Series)], axis=1) print(df_final)
注意事项
- 如果不同
box的键不一致(比如有的有h有的没有),Pandas会自动为缺失的键填充NaN,保证列结构统一。 - 两种方法都能处理任意长度的
box列表,以及单个box的情况,兼容性强。
内容的提问来源于stack exchange,提问作者BORRA PREMA KISHORE
相关产品推荐
相关产品推荐

