用python把值写入pandas表单中的特定单元格

我有一个Excel表格,在一些单元格中已经有一些值。

例如: –

ABCD 1 val1 val2 val3 2 valx valy 

我想要pandas写入特定的细胞,而不触及任何其他细胞,表格等

这是我试过的代码。

 import pandas as pd from openpyxl import load_workbook df2 = pd.DataFrame({'Data': [13, 24, 35, 46]}) book = load_workbook('b.xlsx') writer = pd.ExcelWriter('b.xlsx', engine='openpyxl') df2.to_excel(writer, "Sheet1", startcol=7,startrow=6) writer.save() 

但是,此代码删除旧的单元格值。

我已经回答: 如何写入现有的Excel文件,而不覆盖数据(使用pandas)? 但是这个解决scheme不起作用。

UPDATE2:将数据附加到现有的Excel工作表,保留其他(旧)工作表:

 import pandas as pd from openpyxl import load_workbook fn = r'C:\Temp\.data\doc.xlsx' df = pd.read_excel(fn, header=None) df2 = pd.DataFrame({'Data': [13, 24, 35, 46]}) writer = pd.ExcelWriter(fn, engine='openpyxl') book = load_workbook(fn) writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) df.to_excel(writer, sheet_name='Sheet1', header=None, index=False) df2.to_excel(writer, sheet_name='Sheet1', header=None, index=False, startcol=7,startrow=6) writer.save() 

更新:你的Excel文件没有标题,所以你应该相应地处理它:

 In [57]: df = pd.read_excel(fn, header=None) In [58]: df Out[58]: 0 1 0 abc def 1 ghi lmn In [59]: df2 Out[59]: Data 0 13 1 24 2 35 3 46 In [60]: writer = pd.ExcelWriter(fn) In [61]: df.to_excel(writer, header=None, index=False) In [62]: df2.to_excel(writer, startcol=7,startrow=6, header=None, index=False) In [63]: writer.save() 

在这里输入图像说明

OLD回答:

你可以使用下面的技巧:

首先将excel文件的现有内容读入新的DF:

 In [17]: fn = r'C:\Temp\b.xlsx' In [18]: df = pd.read_excel(fn) In [19]: df Out[19]: ABCD 0 val1 NaN val3 val4 1 val11 val22 NaN val33 

现在我们可以写回来并附加一个新的DF2:

 In [20]: writer = pd.ExcelWriter(fn) In [21]: df.to_excel(writer, index=False) In [22]: df2.to_excel(writer, startcol=7,startrow=6, header=None) In [23]: writer.save() 

在这里输入图像说明

我不能用pandas来解决问题,但却可以用Openpyxl来解决这个Openpyxl

我会写几个代码片段,这将有助于实现所要求的。

 import openpyxl srcfile = openpyxl.load_workbook('docname.xlsx',read_only=False, keep_vba= True)#to open the excel sheet and if it has macros sheetname = srcfile.get_sheet_by_name('sheetname')#get sheetname from the file sheetname['B2']= str('write something') #write something in B2 cell of the supplied sheet sheetname.cell(row=1,column=1).value = "something" #write to row 1,col 1 explicitly, this type of writing is useful to write something in loops srcfile.save('newfile.xlsm')#save it as a new file, the original file is untouched and here I am saving it as xlsm(m here denotes macros). 

所以Openpyxl写入一个特定的单元格,而不会触及其他表格,单元格等。它基本上写入一个新的文件,尊重原始文件的属性