【问题标题】:Modifying an existing excel workbook's multiple worksheets based on pandas dataframe基于 pandas 数据框修改现有 excel 工作簿的多个工作表
【发布时间】:2018-08-31 00:21:50
【问题描述】:

我目前有一个 excel 文件,例如 3 张纸。我想根据来自 2 个 pandas 数据框(每张表 1 个数据框)的新值更改其中 2 张工作表。

这是我目前拥有的代码:

from openpyxl.writer.excel import ExcelWriter
from openpyxl import load_workbook

path = r"Libraries\Documents\Current_Standings.xlsx"
book = load_workbook('Current_Standings.xlsx')
writer = pd.ExcelWriter(path, 'Current_Standings.xlsx', 
engine='openpyxl')
writer.book = writer
Blank_Propensity_Scores.to_excel(writer, sheet_name = 
'Blank_Propensity.xlsx')
Leads_by_Rep.to_excel(writer,sheet_name = 'Leads_by_Rep.xlsx')
writer.save()

当我运行它时,我收到以下错误消息,不知道为什么,因为我查看的每个堆栈溢出答案都只有一项用于 openpyxl:

TypeError: __new__() got multiple values for argument 'engine'

我也尝试过摆脱 engine='openpyxl' 参数,但是当我这样做时,我收到了以下错误消息:

ValueError: No Excel writer 'Current_Standings.xlsx'

【问题讨论】:

  • @piRSquared 任何关于stackoverflow的python天才的帮助将不胜感激:)
  • 在查看了我的回复后,我认为问题是另一个问题,所以我将其删除。困惑在于“pd”。在调用 ExcelWriter 之前。我认为您使用的是 pandas 的 ExcelWriter。我仍在考虑解决方案。
  • @Parfait:我取消了我的回复。删除的原因之一是因为在我的本地测试中,我在编写第一个工作表时收到此错误:AttributeError: '_Openpyxl22Writer' object has no attribute 'create_sheet'。
  • @Parfait:你是对的。但在这种具体情况下,变量“路径”已经具有文件名。谢谢你的建议。
  • 我在另一篇博文中找到了可行的解决方案

标签: python python-3.x pandas openpyxl pandas.excelwriter


【解决方案1】:

如果您在 Python 命令行上执行命令“help(pd.ExcelWriter)”,您将在第一行看到参数:

class ExcelWriter(builtins.object)
 |  Class for writing DataFrame objects into excel sheets, default is to use
 |  xlwt for xls, openpyxl for xlsx.  See DataFrame.to_excel for typical usage.
 |
 |  Parameters
 |  ----------
 |  path : string
 |      Path to xls or xlsx file.
 |  engine : string (optional)
 |      Engine to use for writing. If None, defaults to
 |      ``io.excel.<extension>.writer``.  NOTE: can only be passed as a keyword
 |      argument.
 |  date_format : string, default None
 |      Format string for dates written into Excel files (e.g. 'YYYY-MM-DD')
 |  datetime_format : string, default None
 |      Format string for datetime objects written into Excel files
 |      (e.g. 'YYYY-MM-DD HH:MM:SS')
 |

换句话说,顺序的第二个参数是引擎。因此,如果您放置一个没有任何引爆的字符串,它就会被视为引擎(尽管有关仅将此参数作为关键字传递的帮助中的注释,似乎这就是行为)。如果你再次输入engine='openpyxl',那么你定义了参数'engine'两次。

这是错误的原因

TypeError: __new__() got multiple values for argument 'engine'

总而言之,您应该只使用两个参数调用 ExcelWriter。第一个是 Excel 文件的路径(我猜是变量“路径”)和引擎。

【讨论】:

  • 感谢您的回复。我不确定我是否完全遵循了您所写的内容。你能具体写出你所说的与我现在相比我需要更改的代码吗?谢谢
  • 我说的是这一行:'writer = pd.ExcelWriter(path, 'Current_Standings.xlsx', engine='openpyxl')'。我认为应该将其替换为:'writer = pd.ExcelWriter(path, engine='openpyxl')'。我在您的代码上看不到,但似乎您将 pandas 导入为 pd。
猜你喜欢
  • 2019-08-25
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2017-09-18
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多