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...
中输入公式,它会起作用
它应该有几个条件:
- 您将需要 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怎么做。
我有一个公式,如果它写在 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...
中输入公式,它会起作用它应该有几个条件:
- 您将需要 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怎么做。