将DataFrame附加到Excel中使用pandas
将DataFrame附加到Excel中使用pandas
我希望将数据框追加到Excel中
这段代码几乎符合我的要求。尽管它没有每次都追加。我运行它并将数据框放入Excel中。但每次运行它时都不会追加。我听说openpyxl对CPU要求较高,但还没有听说有很多解决办法。
import pandas from openpyxl import load_workbook book = load_workbook('C:\\OCC.xlsx') writer = pandas.ExcelWriter('C:\\OCC.xlsx', engine='openpyxl') writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) df1.to_excel(writer, index=False) writer.save()
我希望每次运行它时都能追加数据,但这并没有发生。
输出的数据看起来像原始数据:
A B C H H H
我希望第二次运行后的数据如下所示:
A B C H H H H H H
如果这显而易见,我向你道歉,我是Python的新手,我练习的例子没有达到预期的效果。
问题是,我如何在每次运行时追加数据。我尝试切换到xlsxwriter,但出现了`AttributeError: 'Workbook' object has no attribute 'add_format'`错误。
问题出现的原因:
使用append_df_to_excel()
函数时,出现了“Value must be a sequence”错误。
解决方法:
这个错误的原因可能是传递给函数的参数不是一个序列。要解决这个问题,可以检查传递给函数的参数是否正确,并确保它们是序列类型。
以下是一些可能的解决方法:
1. 检查传递给函数的df
参数是否是一个DataFrame对象,因为该函数的第二个参数应该是一个DataFrame对象。
2. 检查传递给函数的header
参数是否是一个序列,如果不是,请将其更改为一个序列类型(例如列表)。
3. 如果传递了sheet_name
参数,请确保它是一个字符串类型。
4. 如果传递了startrow
参数,请确保它是一个整数类型。
如果以上方法都没有解决问题,请参考以下链接中的答案,其中提供了一些关于如何解决这个错误的更多信息:https://stackoverflow.com/a/38075046/5741205。
希望以上解决方法能够帮助解决这个问题。
问题:如何使用pandas将DataFrame追加到Excel文件中?
原因:在使用pandas的to_excel方法将DataFrame追加到Excel文件时,可能会遇到以下问题:
1. 当使用LibreOffice/OpenOffice打开的Excel文件时,可能会出现KeyError: "There is no item named 'xl/drawings/drawing1.xml' in the archive"错误,这是openpyxl的一个bug。
2. 当使用xlsxwriter作为Excel写入器时,可能会出现ValueError: Append mode is not supported with xlsxwriter!错误。
解决方法:
1. 对于遇到第一个问题的情况,可以使用下面的代码将DataFrame追加到Excel文件中:
def append_to_excel(fpath, df, sheet_name): with pd.ExcelWriter(fpath, mode="a") as f: df.to_excel(f, sheet_name=sheet_name) append_to_excel(, , )
其中,
2. 对于遇到第二个问题的情况,可以使用pandas的ExcelWriter类来实现追加功能。具体代码如下:
with pd.ExcelWriter(, mode='a') as writer: df.to_excel(writer, sheet_name= , engine='xlsxwriter')
其中,
以上就是使用pandas将DataFrame追加到Excel文件中的原因及解决方法。
问题的原因是在使用pandas将DataFrame追加到Excel文件时,需要指定插入的起始行。解决方法是根据需求使用startrow=
参数来指定起始行。另外,如果不需要在Excel文件中插入标题行,可以使用header=False
参数。
如果希望自动追加到工作表的末尾,可以使用startrow = writer.sheets['Sheet1'].max_row
来获取当前工作表的最后一行。
如果需要在工作簿的所有工作表上追加数据,可以使用循环遍历所有工作表并使用startrow=writer.sheets[sheetname].max_row
来获取每个工作表的最后一行。
同时,可以使用字典推导式来简化代码:writer.sheets = {ws.title: ws for ws in book.worksheets}
。
完整的代码如下:
import pandas from openpyxl import load_workbook book = load_workbook('test.xlsx') writer = pandas.ExcelWriter('test.xlsx', engine='openpyxl') writer.book = book writer.sheets = {ws.title: ws for ws in book.worksheets} for sheetname in writer.sheets: df1.to_excel(writer, sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index=False, header=False) writer.save()
这段代码在pandas 0.24.2版本和Python 2中测试通过,也适用于0.19.2版本。
对于某些情况下,在获取最后一行时会出现工作表名称报错的问题,可以在max_row
行的代码中排查错误。