Python Pandas:Excel单元格,公式为';0';在pandas read_excel()中
如果我手动打开excel并在不更改任何内容的情况下关闭它,则会保存所有更改。 如果我保存它并用pandas再次读取它,它将给出正确的输出和总和。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 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。更新答案以显示一个伪示例。