Pandas:Excel 带有等式的单元格在 pandas read_excel() 中给出“0”
Pandas: Excel cells with equation gives '0' in pandas read_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)
如果我手动打开 excel 并在不更改任何内容的情况下关闭它,它会提示保存所有更改。
如果我保存它并使用 pandas 再次读取它,它会给出带有总和值的正确输出。
我似乎不明白哪里出了问题。我正在使用 Excel 2016.In excel 等式工作正常。
在深入研究了一些 pandas
和 xlrd
代码之后,这是我的结论 - 专家们可以随时加入:
简要Excel背景:
Excel 的现代版本(.xlsx
文件)是一系列 XML 文件 from/to,Excel 可读写。
Excel EXE 负责运行宁方程,例如您的SUM
公式。因此,当您打开工作簿时,Excel 正在计算总和并将值存储到其基础 XML 文件中。
但是,不打开Excel,这个公式没有被计算。
Pandas:
为了过度简化,pd.read_excel()
函数正在使用 xlrd
库来解析 XML 文件和 return值为 DataFrame
。
但是,如果没有 Excel 到 运行 计算(即:您的 SUM
函数),该值不会存储到基础 XML文件。所以你得到 0 returned.
这是一些 further reading,感谢@jmcnamara 的评论。
可能的解决方案:
一个可能的解决方案是将数据存储到 CSV 文件中,让 Python (pandas
) 负责您的计算和数据操作。 Pandas读写CSV文件很开心
或者,从您的 Python 脚本中查看 subprocess
到 open/close Excel。
伪代码示例:
import subprocess
# Open Excel and workbook.
subprocess.Popen('start excel.exe /path/to/myExcel.xlsx', shell=True)
# Kill all open Excel instances. (Use with care!)
subprocess.Popen('taskkill /f /im excel.exe', shell=True)
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)
如果我手动打开 excel 并在不更改任何内容的情况下关闭它,它会提示保存所有更改。 如果我保存它并使用 pandas 再次读取它,它会给出带有总和值的正确输出。 我似乎不明白哪里出了问题。我正在使用 Excel 2016.In excel 等式工作正常。
在深入研究了一些 pandas
和 xlrd
代码之后,这是我的结论 - 专家们可以随时加入:
简要Excel背景:
Excel 的现代版本(.xlsx
文件)是一系列 XML 文件 from/to,Excel 可读写。
Excel EXE 负责运行宁方程,例如您的SUM
公式。因此,当您打开工作簿时,Excel 正在计算总和并将值存储到其基础 XML 文件中。
但是,不打开Excel,这个公式没有被计算。
Pandas:
为了过度简化,pd.read_excel()
函数正在使用 xlrd
库来解析 XML 文件和 return值为 DataFrame
。
但是,如果没有 Excel 到 运行 计算(即:您的 SUM
函数),该值不会存储到基础 XML文件。所以你得到 0 returned.
这是一些 further reading,感谢@jmcnamara 的评论。
可能的解决方案:
一个可能的解决方案是将数据存储到 CSV 文件中,让 Python (pandas
) 负责您的计算和数据操作。 Pandas读写CSV文件很开心
或者,从您的 Python 脚本中查看 subprocess
到 open/close Excel。
伪代码示例:
import subprocess
# Open Excel and workbook.
subprocess.Popen('start excel.exe /path/to/myExcel.xlsx', shell=True)
# Kill all open Excel instances. (Use with care!)
subprocess.Popen('taskkill /f /im excel.exe', shell=True)