Python Pandas:Excel单元格,公式为';0';在pandas read_excel()中

Python Pandas:Excel单元格,公式为';0';在pandas read_excel()中,python,pandas,xlsxwriter,excel-2016,Python,Pandas,Xlsxwriter,Excel 2016,如果我手动打开excel并在不更改任何内容的情况下关闭它,则会保存所有更改。 如果我保存它并用pandas再次读取它,它将给出正确的输出和总和。 我似乎不明白出了什么问题。我使用的是Excel 2016。在Excel中,方程式运行良好。在挖掘了一些熊猫和xlrd代码后,我的结论是——大师们可以随意跳进去: 简要Excel背景: Excel的现代版本(.xlsx文件)是一系列XML文件,Excel从这些文件中读取和写入数据 Excel EXE负责运行公式,如SUM公式。因此,当您打开工作簿时,Ex

如果我手动打开excel并在不更改任何内容的情况下关闭它,则会保存所有更改。 如果我保存它并用pandas再次读取它,它将给出正确的输出和总和。
我似乎不明白出了什么问题。我使用的是Excel 2016。在Excel中,方程式运行良好。

在挖掘了一些
熊猫
xlrd
代码后,我的结论是——大师们可以随意跳进去:

简要Excel背景: Excel的现代版本(
.xlsx
文件)是一系列XML文件,Excel从这些文件中读取和写入数据

Excel EXE负责运行公式,如
SUM
公式。因此,当您打开工作簿时,Excel将计算总和并将值存储到其基础XML文件中

但是,如果不打开Excel,则不会计算此公式

熊猫: 为了简化,
pd.read_excel()
函数使用
xlrd
库解析XML文件,并将值作为数据帧返回

但是,如果没有Excel来运行计算(即:您的
SUM
函数),则此值不会存储到基础XML文件中。因此,您将返回0

以下是@jmcnamara的评论

可能的解决办法: 一种可能的解决方案是将数据存储到CSV文件中,并让Python(
pandas
)处理您的计算和数据操作。熊猫非常喜欢阅读和编写CSV文件

或者,查看
子流程
,从Python脚本内部打开/关闭Excel

伪代码示例:

import xlsxwriter
import pandas as pd

workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

row = 0
col = 0

for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1


worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

df = pd.read_excel('Expenses01.xlsx')
r_list = df.values.tolist()

for r in r_list:
    print(r)


在翻阅了一些
熊猫
xlrd
代码之后,我的结论是——大师们可以随意跳进去:

简要Excel背景: Excel的现代版本(
.xlsx
文件)是一系列XML文件,Excel从这些文件中读取和写入数据

Excel EXE负责运行公式,如
SUM
公式。因此,当您打开工作簿时,Excel将计算总和并将值存储到其基础XML文件中

但是,如果不打开Excel,则不会计算此公式

熊猫: 为了简化,
pd.read_excel()
函数使用
xlrd
库解析XML文件,并将值作为数据帧返回

但是,如果没有Excel来运行计算(即:您的
SUM
函数),则此值不会存储到基础XML文件中。因此,您将返回0

以下是@jmcnamara的评论

可能的解决办法: 一种可能的解决方案是将数据存储到CSV文件中,并让Python(
pandas
)处理您的计算和数据操作。熊猫非常喜欢阅读和编写CSV文件

或者,查看
子流程
,从Python脚本内部打开/关闭Excel

伪代码示例:

import xlsxwriter
import pandas as pd

workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

row = 0
col = 0

for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1


worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

df = pd.read_excel('Expenses01.xlsx')
r_list = df.values.tolist()

for r in r_list:
    print(r)


似乎
read\u excel
方法只是解析与工作簿关联的XML文件,而excel正在运行公式并相应地更新XML数据。奇怪的是,如果我在运行脚本后打开excel并保存并关闭它,然后用熊猫再次读取excel。它给出了正确的输出。总和值。请参阅XlsxWriter常见问题解答中的此问题和答案:“
read\u excel
方法似乎只是在解析与工作簿关联的XML文件,而excel正在运行公式并相应地更新XML数据。奇怪的是,如果我在运行脚本后打开excel并将其保存并关闭,然后用熊猫再次阅读excel。它给出了正确的输出。总和值。请参阅XlsxWriter常见问题解答中的此问题和答案:。谢谢。现在我明白了问题所在。你知道怎么解决吗?我所说的求解是指不打开excel并保存它。有什么办法吗?问题是我有一个Excel格式(带公式),这就是为什么我想先写然后用熊猫阅读。谢谢你的回答。我帮我理解了这个问题,明白了。也许可以查看
子流程
——它允许您从Python脚本运行shell命令。也许您可以使用它在Python脚本末尾打开/关闭Excel。更新的答案显示了一个伪例子。谢谢。现在我明白了问题所在。你知道怎么解决吗?我所说的求解是指不打开excel并保存它。有什么办法吗?问题是我有一个Excel格式(带公式),这就是为什么我想先写然后用熊猫阅读。谢谢你的回答。我帮我理解了这个问题,明白了。也许可以查看
子流程
——它允许您从Python脚本运行shell命令。也许您可以使用它在Python脚本末尾打开/关闭Excel。更新答案以显示一个伪示例。