Python Pandas如何将嵌套列表转换为DataFrame
问题说明
现有如下结构的嵌套列表,需要将其转换为Pandas DataFrame,直接使用pd.DataFrame(原始数据)的方式无法得到正确结果:
raw_data = [ [{'aaa': '42'}, {'bbb': '60'}, {'ccc': '25'}, {'ddd': '14'}, {'eee': '15'}, {'eee': '84'}], [{'aaa': '4'}, {'bbb': '0'}, {'ccc': '25'}, {'ddd': '1'}, {'eee': '1'}, {'eee': '8'}] ]
转换失败的核心原因是:原始数据的每一行是多个独立的单键值字典,且存在重复键eee,Pandas直接读取时会把每个字典识别为单独的列,无法自动合并成行记录。
可行实现方案
方法1:保留重复列名(和期望输出完全匹配)
按数据原有顺序提取列名和每行的值,直接构造DataFrame即可:
import pandas as pd # 原始数据 raw_data = [ [{'aaa': '42'}, {'bbb': '60'}, {'ccc': '25'}, {'ddd': '14'}, {'eee': '15'}, {'eee': '84'}], [{'aaa': '4'}, {'bbb': '0'}, {'ccc': '25'}, {'ddd': '1'}, {'eee': '1'}, {'eee': '8'}] ] # 从第一行数据提取列名,保持原有顺序 col_names = [list(single_dict.keys())[0] for single_dict in raw_data[0]] # 逐行提取所有值 row_values = [ [list(single_dict.values())[0] for single_dict in row] for row in raw_data ] # 生成DataFrame df = pd.DataFrame(row_values, columns=col_names) print(df)
运行输出结果:
aaa bbb ccc ddd eee eee 0 42 60 25 14 15 84 1 4 0 25 1 1 8
方法2:重复键自动加后缀(避免列名重复,更方便后续计算)
如果不需要保留重复列名,可以在预处理时给重复出现的键加序号后缀,避免后续取数出错:
import pandas as pd from collections import defaultdict raw_data = [ [{'aaa': '42'}, {'bbb': '60'}, {'ccc': '25'}, {'ddd': '14'}, {'eee': '15'}, {'eee': '84'}], [{'aaa': '4'}, {'bbb': '0'}, {'ccc': '25'}, {'ddd': '1'}, {'eee': '1'}, {'eee': '8'}] ] processed_rows = [] for row in raw_data: key_counter = defaultdict(int) current_row = {} for single_dict in row: for k, v in single_dict.items(): if key_counter[k] == 0: col_name = k else: col_name = f"{k}_{key_counter[k]}" current_row[col_name] = v key_counter[k] += 1 processed_rows.append(current_row) df = pd.DataFrame(processed_rows) print(df)
运行输出结果:
aaa bbb ccc ddd eee eee_1 0 42 60 25 14 15 84 1 4 0 25 1 1 8
注意事项
- 方法1生成的DataFrame和期望输出结构完全一致,但存在重复列名,后续通过列名取值时会同时返回两列数据,新手操作容易出错
- 方法2为重复的键自动追加了序号后缀,所有列名唯一,更适合后续做数据筛选、统计计算,可根据实际业务需求选择
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

