Python Pandas:将CSV复制到Excel而不重写

11 浏览
0 Comments

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文件导入为数据帧,然后将其索引与新追加的数据匹配,并重新保存它。或者也许有更简单的方法。非常感谢任何帮助。

0
0 Comments

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`。

0