Python Pandas:将CSV复制到Excel而不重写
Python Pandas:将CSV复制到Excel而不重写
我目前有这段代码。它完美地运行。
它循环遍历文件夹中的Excel文件,
删除前两行,然后将它们保存为单独的Excel文件,
同时将循环中的文件保存为追加文件。
目前,每次运行代码时,追加文件覆盖现有文件。
我需要将新数据追加到已存在的Excel表格('master_data.xlsx')的底部。
dfList = [] path = 'C:\\Test\\TestRawFile' newpath = 'C:\\Path\\To\\New\\Folder' for fn in os.listdir(path): # 绝对文件路径 file = os.path.join(path, fn) if os.path.isfile(file): # 导入Excel文件并命名为xlsx_file xlsx_file = pd.ExcelFile(file) # 查看Excel文件的工作表名称 xlsx_file.sheet_names # 将xlsx文件的数据工作表加载为数据帧 df = xlsx_file.parse('Sheet1',header= None) df_NoHeader = df[2:] data = df_NoHeader # 保存单独的数据帧 data.to_excel(os.path.join(newpath, fn)) dfList.append(data) appended_data = pd.concat(dfList) appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'))
我以为这会是一项简单的任务,但看来不是。
我认为我需要将master_data.xlsx文件导入为数据帧,然后将其索引与新追加的数据匹配,并重新保存它。或者也许有更简单的方法。非常感谢任何帮助。
Python Pandas: 将CSV复制到Excel而不覆盖的解决方法
问题的出现原因:
Pandas的to_excel方法在追加模式下创建新的工作表而不是追加到现有工作表中。这是因为to_excel方法使用了ExcelWriter的sheets属性,而在ExcelWriter中,这个属性没有被填充。
解决方法:
下面的代码修复了这个bug,让to_excel方法在追加模式下能够追加到现有工作表中。
# xl_path 是目标xlsx电子表格的路径 with pd.ExcelWriter(xl_path, 'openpyxl', mode='a') as writer: # 修复的代码 writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets) df.to_excel(writer, sheet_name)
如果想要覆盖现有工作表,可以删除修复代码行:`writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)`。
但是需要注意的是,删除修复代码行会导致错误:`AttributeError: can't set attribute`。