如何将循环生成的多个独立字典转换为Pandas DataFrame?
问题解答
1. 当前代码无法生成目标列表的原因
你的代码核心问题有两个:
- 字典对象重复引用:如果
data = {}定义在外层循环外,每次循环只是修改同一个字典的键值,再把这个字典的引用添加到列表里,最终列表里的所有元素都是同一个字典,最后会被最后一次循环的结果覆盖;如果ls_dict = []也定义在外层循环内,那每次外层循环都会重新创建一个新列表,导致生成多个单字典的小列表,而非累积成一个包含所有字典的大列表。 - 内层循环无意义:你的
keys = [name]和values = [number]都是单元素列表,内层for i in range(len(keys))只会执行一次,完全没必要用这个循环,直接赋值字典键值对即可。
2. 更优的DataFrame转换方法
方法一:直接收集列表(推荐,效率更高)
不需要构建字典列表,直接在外层循环中分别收集name和number到两个列表,最后一次性生成DataFrame:
import pandas as pd # 初始化空列表,放在外层循环之前 user_list = [] user_number_list = [] # 你的外层循环逻辑,每次获取name和number # for ...: # name = ... # 从外层循环获取的用户名 # number = ... # 从外层循环获取的用户编号 user_list.append(name) user_number_list.append(number) # 生成DataFrame df = pd.DataFrame({ 'User': user_list, 'User Number': user_number_list })
方法二:正确构建字典列表
如果坚持用字典列表的方式,要确保每次外层循环创建新的字典,且列表定义在外层循环外:
import pandas as pd # 初始化总列表,放在外层循环之前 total_dict_list = [] # 你的外层循环逻辑 # for ...: # name = ... # number = ... # 每次循环创建新字典并添加到总列表 single_dict = {'User': name, 'User Number': number} total_dict_list.append(single_dict) # 生成DataFrame df = pd.DataFrame(total_dict_list)
内容的提问来源于stack exchange,提问作者Jack Gruber
相关产品推荐
相关产品推荐

