【问题标题】:Writing Data to Existing Excel using pandas in python在 python 中使用 pandas 将数据写入现有 Excel
【发布时间】:2020-01-13 15:40:20
【问题描述】:

目前,我正在将两个数据框导出到一个 Excel 文件中。每个数据框都放置在单独的工作表上。我目前正在运行模拟,每个数据框需要 2,000 列(每张纸上 2,000 列)。每次我运行我的代码时,它都会创建一个新的 excel 文件(我最初想要的)。但是为了节省时间,我想知道是否可以通过添加新的数据列而不覆盖现有数据来写入现有的 excel 文件?

######### This is my original code ################
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
from pandas import DataFrame
from openpyxl import Workbook

df1 = pd.DataFrame(returns1)
df2 = pd.DataFrame(returns2)


x1 = 'mypath/ '
x2 = datetime.datetime.now().strftime('%B %d, %Y %H-%M-%S')
x3 = '.xlsx'
destination = x1 + x2 + x3
writer = pd.ExcelWriter(destination, engine='xlsxwriter')

df1.to_excel(writer, sheet_name= 'Returns 1', index=False)
df2.to_excel(writer, sheet_name= 'Returns 2', index=False)
writer.save()
### 更新

代码有效!感谢所有提供帮助的人,尤其是@zhqiat。下面是最终代码。正是我想要的。我希望这将帮助其他遇到与我相同的问题的人。

df1 = pd.DataFrame(returns1)
df2 = pd.DataFrame(returns2)

book = load_workbook('mypath.xlsx')
writer = pd.ExcelWriter('mypath.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}

df1.to_excel(writer, sheet_name='Returns1', startrow=0, startcol=writer.sheets['Returns1'].max_column, index=False)
df2.to_excel(writer, sheet_name='Returns2', startrow=0, startcol=writer.sheets['Returns2'].max_column, index=False)

This is what I wanted.
 A
100
120
119
225

Second Time
 A     B
100    98
120   100
119   105
125   111

Third Time
 A     B     C
100    98    106 
120   100    99
119   105    101
125   111    89

等等……

【问题讨论】:

  • Please also forgive me as I am fairly new to python. 你写了一个很好的问题,格式正确,方式准确。遵守 StackOverflow 行为准则,无需道歉。
  • 为什么不直接读取 excel 文件并将其存储为数据框并附加系列并写入同一个 excel 表?
  • @aunsid 你能举例说明我是如何做到的吗?
  • 只需使用 openpyxl 函数将数据帧转换为行。
  • 您在没有必要也没有动态循环的情况下循环工作簿中的工作表。在for sheetname in writer.sheets: 循环中,您正在将 df1 和 df2 的输出写入工作表。但是对于工作簿中的每个工作表,您都执行相同的命令(没有任何更改),这就是您的输出最终被复制的方式。

标签: python excel pandas dataframe openpyxl


【解决方案1】:

不幸的是,追加到 excel 中并不是 pandas 中一个完全成熟的功能。

在您的解决方案中,您可以使用 excel writer 对象将工作表缝合在一起。

听起来您想为所有新数据(而不是行)添加列,因此您可能需要使用

确定电子表格的宽度

maxcol = writer.sheets['SheetName'].max_column

** 编辑,我的错,是max_column 而不是max_col **

有关如何添加行的完整代码,请参阅prior question from 2017

【讨论】:

  • 哇!谢谢,这确实有效。但是,我遇到了另一个问题。我已经在 UPDATE 下的原始帖子中解释了这个问题。你知道为什么它可能会重复输出吗?
【解决方案2】:

读取 excel 文件并将其存储为数据框并附加系列并写入同一个 excel 表

# read wherever you have stored the file

prev_df = pd.read_excel('path to file.xlsx')

# convert new series to df
new_df =  pd.DataFrame(var1)

# join
df_to_write = prev_df.join(new_df)

# write to excel

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2022-07-26
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    相关资源
    最近更新 更多