Pandas DataFrame填充JSON模板重复问题:如何实现一行一模板?
问题:遍历DataFrame填充JSON模板后列表全是最后一行重复内容
问题原因
你遇到的问题本质是Python字典的引用特性:data_template是一个字典对象,每次循环中你修改的都是同一个字典的属性,而添加到dict_list里的是这个字典的引用,不是新的副本。最终列表里的所有元素都指向同一个字典对象,当最后一次循环修改完字典后,所有列表元素都会显示最后一次修改的内容。
解决方案
下面提供两种高效的解决方式:
方法1:深拷贝模板字典
每次循环时,对原始模板字典进行深拷贝,创建一个独立的新对象,再修改并添加到列表:
import json import pandas as pd import copy # 读取并解析运动数据 with open('exercises.json','r') as f: data = json.loads(f.read()) df = pd.json_normalize(data, record_path = ['exercises']) parsed_df = df[['name', 'category']] parsed_df.loc[:, 'authorized'] = True # 加载模板并生成结果列表 with open('template.json','r') as f: data_template = json.loads(f.read()) dict_list = [] for index, row in parsed_df.iterrows(): # 深拷贝模板,创建独立的新字典 new_template = copy.deepcopy(data_template) new_template['pk'] = index + 1 # 保持pk从1开始连续,可根据需求调整 new_template['fields']['name'] = row['name'] new_template['fields']['category'] = row['category'] new_template['fields']['authorized'] = row['authorized'] dict_list.append(new_template)
方法2:直接生成新字典(更简洁)
如果模板结构固定,可以直接在循环里生成新的字典结构,避免依赖外部模板的拷贝操作:
import json import pandas as pd # 读取并解析运动数据 with open('exercises.json','r') as f: data = json.loads(f.read()) df = pd.json_normalize(data, record_path = ['exercises']) parsed_df = df[['name', 'category']] parsed_df.loc[:, 'authorized'] = True # 直接生成结果列表 dict_list = [] for index, row in parsed_df.iterrows(): new_entry = { "model": "myapp.exercise", "pk": index + 1, "fields": { "name": row['name'], "category": row['category'], "authorized": row['authorized'] } } dict_list.append(new_entry)
验证结果
执行上述代码后,dict_list中的每个元素都会对应DataFrame的一行数据,不再出现重复的最后一行内容。
内容的提问来源于stack exchange,提问作者rafaelHTML
相关产品推荐
相关产品推荐

