Python中如何合并循环生成的多个Pandas DataFrame为单个DataFrame?
解决方案:合并JSON提取后的Pandas DataFrame
你的核心问题是在循环中重复创建DataFrame,没有先统一收集所有数据,导致每次循环都生成单独的小DataFrame。正确的思路是先把所有符合条件的数据收集到一个列表或字典中,最后一次性生成合并后的DataFrame。
方案一:用列表收集所有条目(推荐)
直接遍历JSON数据,把每个符合条件的字段存入临时字典,再将字典加入列表,最后用列表生成完整DataFrame:
import pandas as pd # 初始化空列表,存储所有提取到的条目 data_list = [] # 遍历JSON中的历史记录 for data in list_json[0]["changelog"]["histories"]: entry = {} # 提取Name字段 if data["items"][0]["field"] == "issuetype" and data["items"][0]["from"] == "10901": entry["Name"] = data["name"] # 提取Date字段 if data["items"][0]["field"] == "Date" and data["items"][0]["to"] == "1942": entry["Date"] = data["date"] # 仅将有有效数据的条目加入列表 if entry: data_list.append(entry) # 生成合并后的DataFrame final_df = pd.DataFrame(data_list) # 调整列顺序(确保Name、Date在前) desired_cols = ["Name", "Date"] final_df = final_df[desired_cols + [col for col in final_df.columns if col not in desired_cols]]
方案二:按对象标识累积数据(适配原代码的storyDict逻辑)
如果你的each变量是用来区分不同对象的标识,可以先按each累积每个对象的信息,最后一次性转成DataFrame:
import pandas as pd # 初始化字典,按对象标识存储信息 storyDict = {} for data in list_json[0]["changelog"]["histories"]: # 确保当前对象标识已存在于字典中 if each not in storyDict: storyDict[each] = {} # 填充Name字段 if data["items"][0]["field"] == "issuetype" and data["items"][0]["from"] == "10901": storyDict[each]["Name"] = data["name"] # 填充Date字段 if data["items"][0]["field"] == "Date" and data["items"][0]["to"] == "1942": storyDict[each]["Date"] = data["date"] # 将字典转成DataFrame,重置索引为对象ID列 final_df = pd.DataFrame.from_dict(storyDict, orient="index").reset_index(names="ObjectID") # 调整列顺序 desired_cols = ["ObjectID", "Name", "Date"] final_df = final_df[desired_cols + [col for col in final_df.columns if col not in desired_cols]]
两种方案都避免了循环中重复创建DataFrame的问题,最终得到包含所有对象行的单一DataFrame。
内容的提问来源于stack exchange,提问作者HomerDanielle
相关产品推荐
相关产品推荐

