pandas 写的 Excel 公式有误,但是同样的公式写在 Excel 栏就可以了

Error in pandas written Excel formula, but the same formula written in the Excel bar works fine

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

Blockquote Removed Records: Formula from /xl/worksheets/sheet1.xml part

公式相当大:

=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...

中输入公式,它会起作用

它应该有几个条件:

  1. 您将需要 Excel 的最新版本,因为公式包含动态函数 (FILTER())。
  2. 您需要使用最新版本的 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怎么做。