如何强制pandas评估xlsx的公式而不是将它们读作NaN?

问题描述 投票:0回答:1

以下是我要做的事情

  1. 将包含公式的Excel文件读入pandas dataframe
  2. 更改某个单元格中的值
  3. 根据公式评估单元格值
  4. 最后,将该文件另存为html

这是我的代码

import pandas as pd
import numpy as np
from openpyxl import load_workbook

wb = load_workbook(filename = 'initial.xlsx')
sheet_names = wb.get_sheet_names()
name = sheet_names[0]
sheet_ranges = wb[name]
df = pd.DataFrame(sheet_ranges.values)
df['x']['C'] = 10
df.to_excel("processing.xlsx", header=False, index=False)

df1 = pd.read_excel("processing.xlsx", sheetname=0, header=0)
df1.to_html('output.html')

使用此代码,我可以获得完全正常的processing.xlsx,但如果我尝试将其转换为html,则数据框会将所有公式都读为NaN。

问题:如何强制pandas评估xlsx的公式而不是将它们读作NaN?

PS:如果我尝试将initial.xlsx转换为html,它可以正常运行,因此to_excel输出中必定存在错误。

pandas openpyxl
1个回答
-1
投票

我发现了问题和一个混乱的解决方法。问题:openpyxl在保存时不保持类型完整。 processing.xlsx的大小减少了10kb。因此,大熊猫将其视为NaN。因此,我不得不使用xlwings来正确解密单元格的类型。 PS:这不是最好的解决方案,因此欢迎其他答案

def df_from_excel(path):
    app = xw.App(visible=False)
    book = app.books.open(path)
    book.save()
    app.kill()
    return pd.read_excel(path,header=0)

df1 = df_from_excel("1.xlsx")
print(df1.head())
df1.to_html('public\output.html')
© www.soinside.com 2019 - 2024. All rights reserved.