python - Pandas ExcelWriter 使用 for 循环覆盖工作表
问题描述
我有一个嵌套的 for 循环,它从具有多个工作表的主文件中获取数据,并按用户为每个工作表拆分数据。然后我想用与主文件相同的表格将每个用户的数据写入他们自己的文件。
这是我到目前为止所拥有的:
tm_sheet_to_df_map = pd.read_excel(src_file_tm, sheet_name=None)
for key, value in sorted(tm_sheet_to_df_map.items(),reverse=True):
tm_group = value.groupby('TM')
for TM, group_df in tm_group:
attachment = attachment_path_tm / f'{TM}' / f'Q221 New Accounts - {TM}.xlsx'
attachment1 = os.makedirs(os.path.dirname(attachment), exist_ok=True)
writer = ExcelWriter(attachment, engine = 'xlsxwriter')
group_df.to_excel(writer, sheet_name =f'{key}', index=False)
writer.save()
问题 -上述脚本为每个用户创建一个新文件,但只会将最终数据帧写入每个文件,而不是添加主文件中的所有工作表。任何想法如何将每张纸写入单个文件?我尝试将 writer.save() 移到循环之外,但没有成功。
解决方案
您需要 ExcelWriter 的“附加”模式:
try:
# append mode will fail if file does not exist
writer = ExcelWriter(attachment, engine = 'openpyxl', mode="a")
except FileNotFoundError:
writer = ExcelWriter(attachment, engine = 'openpyxl')
推荐阅读
- python - 以特定数字作为参数的奇怪 Python Pandas read_sql_query() 行为
- python - 如何隐藏我正在使用机器人的事实?
- spring - 在 kotlin 中转换为未知类型时杰克逊 IntelliJ 错误
- typescript - 扩展类型以创建子类型
- python-3.x - 如何从 datetime.timedelta 中提取秒数
- docker - Docker 中的 IdentityServer4 + MVC 客户端
- macos - 在 MAC OS 中将音频数据从应用程序路由到虚拟音频驱动程序
- vue.js - vue-utils 在 keydown 事件后获取模型的值
- javascript - React Hooks:在钩子组件的子组件之间传递状态的最佳实践
- android - Flutter:通过调用 STF 小部件将变量从一个页面发送到另一个页面