我现在有这个代码。它工作得很好
它在文件夹中的excel文件中循环, 删除前两行,然后将其保存为单个excel文件, 它还将循环中的文件保存为附加文件
当前,每次运行代码时,附加的文件将覆盖现有文件
我需要将新数据附加到现有excel工作表的底部('master_data.xlsx)
dfList = []
path = 'C:\\Test\\TestRawFile'
newpath = 'C:\\Path\\To\\New\\Folder'
for fn in os.listdir(path):
# Absolute file path
file = os.path.join(path, fn)
if os.path.isfile(file):
# Import the excel file and call it xlsx_file
xlsx_file = pd.ExcelFile(file)
# View the excel files sheet names
xlsx_file.sheet_names
# Load the xlsx files Data sheet as a dataframe
df = xlsx_file.parse('Sheet1',header= None)
df_NoHeader = df[2:]
data = df_NoHeader
# Save individual dataframe
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文件作为数据帧引入,然后将索引与新附加的数据进行匹配,并将其保存回原处。或者有更简单的方法。感谢您的帮助
如果每次在工作表上使用ExcelWriter,它将覆盖上一个工作表,并且所有可见的内容都是附加到工作簿的最后一个数据表。 相反,您可以维护一个最初为1的计数器,您需要为其初始化excel工作表,并使用现有的方法添加初始数据
或者你可以使用我使用的以下方法。若要在下次使用工作簿时加载工作簿,或在第一种情况下尝试加载工作簿时,文件未发现异常
用法:
无需关闭excelwriter。这是一个自动功能。如果您明确定义,将显示警告
如果您没有严格地查找excel文件,则将输出作为csv文件,并将csv复制到新的excel文件中
df.to_csv('filepath', mode='a', index = False, header=None)
模式='a'
手段附加
这是一个迂回的方式,但工程整洁
请在下面找到一个用于将数据框附加到现有Excel文件的帮助函数
如果Excel文件不存在,则将创建它
更新[2021-09-12]:针对熊猫1.3.0+
以下功能已通过以下测试:
旧版本(使用Pandas 1.2.3和Openpyxl 3.0.5测试):
用法示例:
c:/temp/test.xlsx:
PS如果不想重复列名,您可能还需要指定
header=None
更新:您可能还需要检查this old solution