如何将Pandas数据框添加到Excel工作表中

3

你好,我看过一些处理更复杂问题的解决方案,但现在我尝试做以下操作:

将一个dataframe添加到Excel表格中。我有一个包含数据的Excel文件,类似于:

# Create Initial Excel 
data = [['tom', 10,1,'a'], ['matt', 15,5,'b'],['nick', 18,2,'b'],['luke', 12,6,'b'],['geoff', 20,10,'a']]

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Attempts','Score','Category']) 
df
    Name    Attempts    Score   Category
0   tom     10             1    a
1   matt    15             5    b
2   nick    18             2    b
3   luke    12             6    b
4   geoff   20             10   a

df.to_excel('Excel.xlsx',index=False)

每周我都会得到以以下形式呈现的新数据:
  #New Dataframe
    data2 = [['mick', 10,1,'a'], ['matt', 15,5,'b'],['jim', 18,2,'b'],['mark', 12,6,'b'],['geoff', 20,10,'a']]
    df2 = pd.DataFrame(data2, columns = ['Name', 'Attempts','Score','Category']) 
    df2
        Name    Attempts    Score   Category
    0   mick    10             1    a
    1   matt    15             5    b
    2   jim     18             2    b
    3   mark    12             6    b
    4   geoff   20            10    a

我尝试了以下方法来将新数据追加到电子表格数据下方:
#Append DF2

with pd.ExcelWriter('Excel.xlsx',
                    mode='a') as writer:
    df2.to_excel(writer,'Sheet1',index=False,header=False)

但是它已经附加到一个新的工作表上了吗?
我只是希望将其添加到我的Excel中,以便它显示:
Name    Attempts    Score   Category
0   tom     10             1    a
1   matt    15             5    b
2   nick    18             2    b
3   luke    12             6    b
4   geoff   20             10   a
0   tom     10             1    a
1   matt    15             5    b
2   nick    18             2    b
3   luke    12             6    b
4   geoff   20             10   a

我在类似的问题中发布了一个答案 https://dev59.com/WrHma4cB1Zd3GeqPGR3w#75222516 - Rodney Souza
3个回答

6

我在这里找到了答案:使用pandas将数据框追加到Excel中,还有特定于我的问题的细节。

from openpyxl import load_workbook

path = "Excel.xlsx"
book = load_workbook(path)
writer = pandas.ExcelWriter("Excel.xlsx", engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}


df2.to_excel(writer, startrow=writer.sheets['Sheet1'].max_row, index = False,header= False)

writer.save()

2

#对于Python 3.9,

df = pd.DataFrame(data={'a':[433], 'b':['corn'], 'c':[0.544]})
df.to_excel("test1.xlsx")

import openpyxl 

df1 = pd.DataFrame(data={'a':[4], 'b':['corn'], 'c':[0.5]})     
wb = openpyxl.load_workbook("test1.xlsx") 
  
sheet = wb.active 

for index, row in df1.iterrows():

    sheet.append(row.values.tolist())
  
wb.save('test1.xlsx')

0

这里有一个方法可以尝试,类似的方法在这个答案中提到过。 我建议的是先将你的两个数据框连接起来,然后再写入Excel文件,而不是尝试合并Excel文件。

import pandas as pd

# Create Initial Excel 
data = [['tom', 10,1,'a'], ['matt', 15,5,'b'],['nick', 18,2,'b'],['luke', 12,6,'b'],['geoff', 20,10,'a']]

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Attempts','Score','Category']) 

#New Dataframe
data2 = [['mick', 10,1,'a'], ['matt', 15,5,'b'],['jim', 18,2,'b'],['mark', 12,6,'b'],['geoff', 20,10,'a']]
df2 = pd.DataFrame(data2, columns = ['Name', 'Attempts','Score','Category']) 

# Prepare a list of the dataframes, needed for the concat method
all_df = [df, df2]

out_df = pd.concat(all_df).reset_index(drop=True)

# Write concatenated dataframes to Excel
out_df.to_excel("Combined.xlsx", index=False)

感谢@Javier Palomino。我可能没有表达清楚,但我的Excel文件永久地放在目录中,每周我都会得到新数据,所以dfdf2不会同时生成。除非我编写代码每周重新从电子表格中重新导入并合并,这也是一种选择。 - SOK
2
感谢您的反馈@SOK,也许这种方法可以帮助您,在此处发布的答案中https://dev59.com/O1YN5IYBdhLWcg3wQWIV#47738103 - Javier Palomino
啊,太好了 - 完美地回答了我的问题。我在寻找答案时可能错过了它。感谢提醒。 - SOK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接