pandas 编写的 Excel 公式出错,但 Excel 栏中编写的相同公式可以正常工作

Posted

技术标签:

【中文标题】pandas 编写的 Excel 公式出错,但 Excel 栏中编写的相同公式可以正常工作【英文标题】:Error in pandas written Excel formula, but the same formula written in the Excel bar works fine 【发布时间】:2022-01-22 06:55:09 【问题描述】:

我有一个公式,如果它写在 Excel 公式栏中可以正常工作,但如果我在 pandas 中键入相同的公式,它会显示此错误:

Blockquote 已删除记录:来自 /xl/worksheets/sheet1.xml 部分的公式

公式很大:

=INDEX(LINEST(FILTER(IF(ISNUMBER(E2:E1048576),E2:E1048576,""),IF(ISNUMBER(E2:E1048576),E2:E1048576,"")<>"",),FILTER(B2:B1048576,IF(ISNUMBER(E2:E1048576),E2:E1048576,"")<>"",),FALSE,TRUE),1,1)

此公式计算两个信号之间散点图的斜率,但其中一个 (Column E) 可能包含 #N/A 值。

公式工作正常,但我找不到使用 pandas 创建 .xlsx 时它不起作用的原因。

import pandas as pd

df = pd.DataFrame()
formula = '=INDEX(LINEST(FILTER(IF(ISNUMBER(E2:E1048576),E2:E1048576,\"\"),IF(ISNUMBER(E2:E1048576),E2:E1048576,\"\")<>\"\",),FILTER(B2:B1048576,IF(ISNUMBER(E2:E1048576),E2:E1048576,\"\")<>\"\",),FALSE,TRUE),1,1)'
df[0,'formula'] = formula
df.to_excel('name.xlsx')

代码与我发布的不完全一样(显然,因为它没用),但仍然会弹出错误。

非常感谢您的帮助,也许公式语法有错误?我无法理解的是,如果我在 Excel 中输入公式,它会起作用......

【问题讨论】:

输入df.loc[0,'formula'] = formula。您正在生成一个空数据框。 没错,我想把 .loc 放进去,你是对的,但这不是问题。 【参考方案1】:

它应该有几个附加条件:

    您需要最新版本的 Excel,因为公式包含动态函数 (FILTER())。 您需要使用最新版本的 XlsxWriter 作为 excel 引擎才能获得对动态函数的支持。

这是一个基于你的小例子:

import pandas as pd

formula = '=INDEX(LINEST(FILTER(IF(ISNUMBER(E2:E1048576),E2:E1048576,\"\"),IF(ISNUMBER(E2:E1048576),E2:E1048576,\"\")<>\"\",),FILTER(B2:B1048576,IF(ISNUMBER(E2:E1048576),E2:E1048576,\"\")<>\"\",),FALSE,TRUE),1,1)'

df = pd.DataFrame('formula': [formula])
writer = pd.ExcelWriter('formula.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')

writer.save()

这是输出:

如您所见,该函数有效(尽管由于没有任何数据可供该函数操作,因此出现计算错误)。

您也可以在添加数据框数据后添加此函数(即,如果您不想在数据框中包含公式,请参阅Working with Python Pandas and XlsxWriter 以获取有关如何执行此操作的示例.

【讨论】:

非常感谢,你拯救了我的一天!感谢您花时间回答我的问题 :)

以上是关于pandas 编写的 Excel 公式出错,但 Excel 栏中编写的相同公式可以正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Excel中长公式的编辑方法(年休假计算)

pandas读取excel文件出错啥原因?

Excel 中的 IFS 公式:公式将分类正数但不分类负数

熊猫读取excel值而不是公式

Excel,复杂的条件格式

excel遇到难题,为啥复制数据后所计算公式处显示#VALUE?