繁体   English   中英

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 并关闭它而不更改任何内容,它会说保存所有更改。 如果我保存它并用熊猫再次读取它会给出正确的输出和总和值。 我似乎无法理解出了什么问题。 我正在使用 Excel 2016。在 excel 中,方程工作正常。

通过一些挖后pandasxlrd代码,这是我的结论-大师随时在跳:

简要的 Excel 背景:

Excel 的现代版本( .xlsx文件)是一系列 XML 文件,Excel 从中读取和写入。

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

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

熊猫:

为了简化pd.read_excel()函数使用xlrd库来解析 XML 文件并将值作为DataFrame返回。

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

这是一些进一步阅读,由@jmcnamara 的评论提供。

可能的解决方案:

一个可能的解决方案可能是将数据存储到 CSV 文件中,让 Python ( pandas ) 负责计算和数据操作。 Pandas 非常乐于读写 CSV 文件。

或者,查看subprocess以从 Python 脚本内部打开/关闭 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM