Python如何将for循环生成的字典列表转换为DataFrame
实现方法
你只需要先把所有for循环产出的字典汇总到同一个大列表中,再传入pandas的DataFrame构造函数即可,pandas原生支持「同键名字典组成的列表」直接转结构化表格,会自动把字典键作为列名、字典值作为行数据。
前置准备
如果还没安装pandas,先在终端执行安装命令:pip install pandas
写法1:循环过程中同步收集数据(推荐,性能最优)
不要每次循环单独存小列表,直接在循环里把每次产出的字典批量追加到统一的收集列表中,循环结束后一次性生成DataFrame,避免多次拼接DataFrame带来的性能损耗。
示例代码:
import pandas as pd # 初始化空列表,用来存储所有行对应的字典 all_rows = [] # 替换成你自己的for循环逻辑即可 # 以下为模拟你给出的两次循环产出的示例 for loop_count in range(2): if loop_count == 0: # 第一次循环的输出结果 loop_output = [{'name':'kumar','job':'Plumber'},{'name':'Rajesh','job':'Painter'}] else: # 第二次循环的输出结果 loop_output = [{'name':'Jaslin','job':'Teacher'},{'name':'Ramu','job':'Engineer'}] # 把当前循环产出的所有字典批量加入总列表 all_rows.extend(loop_output) # 直接生成目标DataFrame df = pd.DataFrame(all_rows) # 打印验证输出 print(df)
运行后输出的结果和你预期的结构完全一致:
name job 0 kumar Plumber 1 Rajesh Painter 2 Jaslin Teacher 3 Ramu Engineer
写法2:已拿到所有循环产出的小列表时的处理方法
如果你已经跑完循环,把每次产出的小列表都存在了一个嵌套列表里,可以先用列表推导式把嵌套结构展平,再生成DataFrame:
import pandas as pd # 假设这是你已经存储好的、所有循环产出的小列表集合 nested_loop_result = [ [{'name':'kumar','job':'Plumber'},{'name':'Rajesh','job':'Painter'}], [{'name':'Jaslin','job':'Teacher'},{'name':'Ramu','job':'Engineer'}] ] # 展平为单层级的字典列表 all_rows = [single_dict for small_list in nested_loop_result for single_dict in small_list] # 生成目标DataFrame df = pd.DataFrame(all_rows)
注意事项
- 只要所有字典的键名保持一致,pandas会自动对齐列,不会出现列错位问题
- 如果个别字典缺少某个键,pandas会自动在对应行的该列位置填充空值
NaN,可后续按需做缺失值处理 - 数据量较大时不要在每次循环中生成小DataFrame再做拼接,该写法性能极差,优先用先收集所有字典、一次性生成DataFrame的方案
内容的提问来源于stack exchange,提问作者Khaja
相关产品推荐
相关产品推荐

