如何用pandas在单次循环中将多个JSON数组写入同一Excel文件
问题解决方法
你当前代码每次调用pd.DataFrame(...).to_excel("output.xlsx")时,默认都会直接覆盖原文件,所以最终只会保留最后一次循环写入的内容,可根据需求选择以下两种方案修改:
方案1:所有数据合并写入同一个Sheet
在循环外先初始化一个空的DataFrame用于承接所有数据,每次循环将新获取的JSON数组转换为DataFrame后追加到总表中,循环结束后统一导出即可,修改后代码如下:
import pandas as pd # 循环外初始化空DataFrame存储所有数据 all_resources = pd.DataFrame() for t in liste: response = client.list_discovered_resources( resourceType=t, limit=0, includeDeletedResources=False, ) if response['resourceIdentifiers']: print('\n ******************** Resources of Type ',t,'\n') print(jsbeautifier.beautify(str(response['resourceIdentifiers']))) # 单次获取的资源转换为DataFrame current_df = pd.DataFrame(response['resourceIdentifiers']) # 追加到总表,ignore_index重置行索引避免重复 all_resources = pd.concat([all_resources, current_df], ignore_index=True) # 循环结束后一次性导出所有数据,index=False表示不导出pandas默认行号 all_resources.to_excel("output.xlsx", index=False)
方案2:不同类型的资源写入同一个Excel的不同Sheet
如果你想把每种资源类型的数据分开存到不同的Sheet页,可以用pd.ExcelWriter实现,代码如下:
import pandas as pd with pd.ExcelWriter("output.xlsx") as writer: for t in liste: response = client.list_discovered_resources( resourceType=t, limit=0, includeDeletedResources=False, ) if response['resourceIdentifiers']: print('\n ******************** Resources of Type ',t,'\n') print(jsbeautifier.beautify(str(response['resourceIdentifiers']))) current_df = pd.DataFrame(response['resourceIdentifiers']) # 写入对应名称的Sheet,注意Sheet名称不能超过31字符,不能包含\/?*[]等特殊字符 current_df.to_excel(writer, sheet_name=str(t), index=False)
注意:如果运行时提示缺少Excel写入引擎,可执行
pip install openpyxl安装依赖。
内容的提问来源于stack exchange,提问作者Nidorino94
相关产品推荐
相关产品推荐

