如何使用pandas写入excel文档的中间

时间:2017-05-15 18:13:27

标签: python excel pandas

我有一个excel文档(包含格式和所有内容)前几行是标题和标题。

在第11行,我从实际数据开始,包括列标题和所有内容。

我计算要放入此表的数据。

我可以使用header = [11]读取数据,它将使用正确的列名,索引和所有内容读入。我可以填写我的数据,根据需要添加列等等。

当我尝试保存文件时出现问题。如果我只使用to_excel保存,它会保存,但没有任何标题内容或原始格式。

如何将数据框插入现有Excel文档中的某个位置?

ETA:

我忘记提及的一件事可能很重要,原始的excel文件在整个数据部分也都有条件格式。我想保持这一点。

ETA2:添加Josh评论的详细信息。

In [153]: xl.to_excel(writer,  "Program Area Summary.xls", startrow=11)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-153-6541427c4a61> in <module>()
----> 1 xl.to_excel(writer,  "Program Area Summary.xls", startrow=11)

/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/core/frame.pyc in to_excel(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, encoding, inf_rep, verbose)
   1422         formatted_cells = formatter.get_formatted_cells()
   1423         excel_writer.write_cells(formatted_cells, sheet_name,
-> 1424                                  startrow=startrow, startcol=startcol)
   1425         if need_save:
   1426             excel_writer.save()

/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/io/excel.pyc in write_cells(self, cells, sheet_name, startrow, startcol)
   1243             wks = self.book.create_sheet()
   1244             wks.title = sheet_name
-> 1245             self.sheets[sheet_name] = wks
   1246 
   1247         for cell in cells:

TypeError: list indices must be integers, not str

我在ipython中这样做了,所以其他代码还没有。 xl是一个数据帧。

1 个答案:

答案 0 :(得分:1)

我知道有两个选项,第一个是通过搜索StackOverflow找到的,你可以找到here。您可以使用该示例和to_excel方法中的startrow参数在第11行或其他所需位置启动DataFrame。像

df.to_excel(writer, startrow=11, startcol=2).

第二个选项是xlwings库,这是我在Python中使用Excel时通常使用的库。 Here是xlwings链接到使用pandas DataFrames的文档。以下是执行您正在寻找的代码段。

import xlwings as xw
bk = xw.Book('BookX.xlsx')
sht = bk.sheets[0]
sht.range('A11').value = df # df is your pandas Dataframe
bk.save()
相关问题