使用pandas向现有的excelfile添加工作表

时间:2015-12-24 11:27:29

标签: python excel numpy pandas

我有两个excel文件。参与者完成实验,结果应该放在另一张纸上的两个excel文件中。每个新参与者都应该这样做。 sheetname是001,002,...,取决于参与者的数量。但是这些异常只会被覆盖。

我正在使用的代码:

import pandas
allmeans = numpy.array([[(meanreactiontimeinputsusercongruentpositief),(meanreactiontimeinputsusercongruentnegatief),(meanreactiontimeinputsuserincongruentposneg), (meanreactiontimeinputsuserincongruentnegpos), (meanvalueinputusercongruentpositief), (meanvalueinputusercongruentnegatief), (meanreactiontimeinputsuserincongruentposneg), (meanvalueinputuserincongruentnegpos)]])
to_write = pandas.DataFrame({'Age': age, 'Gender': gender, 'MeanReactionTimeCongruentPos': allmeans[:,0], 'MeanReactionTimeCongruentNeg': allmeans[:,1], 'MeanReactionTimeIncongruentPosNeg': allmeans[:,2], 'MeanReactionTimeIncongruentNegPos': allmeans[:,3], 'MeanValueInputCongruentPos': allmeans[:,4], 'MeanValueInputCongruentNeg': allmeans[:,5], 'MeanValueInputIncongruentPosNeg': allmeans[:,6], 'MeanValueIncongruentNegPos': allmeans[:,7]})
to_write.to_excel('MeansOfUsers.xlsx',sheet_name = str(participantnumber), index = False, startrow = 3, startcol = 2)

allresults= numpy.array([listofrandomizedconditions,inputsuser,reactiontimesuser])
to_write2 = pandas.DataFrame({'Conditions': allresults[0,:], 'Inputs': allresults[1,:], 'Reactionstimes': allresults[2,:]})
to_write2.to_excel('ResultsofUsers.xlsx',sheet_name = str(participantnumber), index = False, startrow=3,startcol=2)

所以基本上它总是使用正确的工作表名称创建这两个版本,但除了添加新工作表之外,现有工作表只会被新工作表覆盖。我该如何解决?

编辑:我发现使用openpyxl的工作簿,我可以在加载到工作簿中后使用create_sheet来获取一个新工作表,但是我仍然坚持如何用{{1编辑那个精确的工作表}} 我建立。

1 个答案:

答案 0 :(得分:2)

您应该创建一个ExcelWriter对象并使用它来保存数据帧。您需要调用其save()方法来实际保存excel文件。

import pandas as pd

ew = pd.ExcelWriter('a.xlsx')
pd.DataFrame({'a':[1,2]}).to_excel(ew, sheet_name='a')
pd.DataFrame({'a':[1,2]}).to_excel(ew, sheet_name='b')
ew.save() # don't forget to call save() or the excel file won't be created