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

时间:2017-12-31 09:20:18

标签: pandas openpyxl

以下是我要做的事情

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

    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 输出中的内容必定是错误的。

1 个答案:

答案 0 :(得分:-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')