pands DataFrame循环写入excel中的问题

数据处理中 有时候会碰到处理完之后循环写入到excel的问题
主要使用两个库:openpyxl库和xlsxwriter库 目前xlrd库python支持不是很友好
使用Tkinter模块进行文件或者文件夹选择 我在这里使用的是文件夹选择 然后遍历文件夹里面的excel 最后写入excel不同的sheet或者写入到一张表中
这里我建3张表格 放入test文件夹下
测试
与文件名一样

import os
import openpyxl
import xlsxwriter
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from openpyxl import load_workbook

root = tk.Tk()
root.withdraw()
Folderpath = filedialog.askdirectory() # 获得选择好的文件夹
# 添加try...except
try:
	if os.path.isfile(Folderpath +'./合并.xlsx'):
		os.remove(Folderpath + './合并.xlsx')
	filelist = os.listdir(Folderpath)
	# 在此文件夹下建立新的文件以合并
	wb = openpyxl.Workbook()
	wb.save(Folderpath + './合并.xlsx')
	# 打开文件,以备后面写入用到,engine一定要选择xlsxwriter后面进行解释
	writer = pd.ExcelWriter(Folderpath+'./合并.xlsx',engine='xlsxwriter')
	for filename in filelist:
		if filename.endswith('xlsx'): # 选取文件后缀名为.xlsx的文件
			file_name = Folderpath + '/' + filename # 因为是相对路径,防止pd读取的时候显示Not found错误
			file_name = file_name.replace('/','\\')
			data = pd.read_excel(r'%s'%file_name) # 读取excel文件
			# 写入到同一个excel不同的sheet中 sheet名字以文件命名
			# sheet_name=filename.split('.')[0]
			# 因为文件名是.xslx格式 所以取.之前的
			data.to_excel(writer, sheet_name=filename.split('.')[0], index=False)
		else:
			pass 
	writer.close() # 关闭合并.xlsx
except FileNotFoundError:
	print('未传入任何文件夹')

运行结果如下
结果
结果
之所以不使用’engine='openpyxl因为有的时候会出现警告或者错误 我演示下 并会有多余得Sheet产生
在这里插入图片描述
这里我们将engine修改为’openpyxl’ 因为要写入不同的sheet所以要添加mode=‘a’ mode='w’是写入同一个sheet里面 **
警告展示
在这里插入图片描述
会出现这种情况产生,所以一般情况下使用
engine=‘xlsxwriter**
这种情况是因为 我们每循环一次 然后让writer这个工作簿保存一下 如图所示
在这里插入图片描述
写入到同一个excel 需要在data.to_excel(writer, startrow=’ ')设置start参数 并且传进去之后也会出现上面所出现警告情况
我是这样处理的 使用上面的合并.xlsx文件 因为我上面的文件数据是不需要处理的 所以产生的sheet里面的数据与原数据相同(有人会说使用concat上面的三张表,在现实中碰见的都是处理之后的 与原数据完全不同),循环读取sheet然后进行合并

# 紧接上面部分缩写 在except之外
wb = load_workbook(Folderpath + '/合并.xlsx')
sheets = wb.sheetnames
df = pd.DataFrame()
for i in range(len(sheets)):
    df1 = pd.read_excel(Folderpath + '/合并.xlsx', sheet_name=i)
    df = df.append(df1)
df.to_excel(Folderpath + '/finally.xlsx', index=False)

合并之后
因为是本人做数据时 所碰到的问题 网上搜过大量资料 都未能很好解决 自己摸索出来的 欢迎各位随时交流 如果有更好的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vergil_Zsh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值