如何强制 pandas 计算 xlsx 的公式而不是将它们读作 NaN?
How to force pandas to evaluate formulas of xlsx and not read them as NaN?
这是我正在尝试做的事情
- 将包含公式的 Excel 文件读入 pandas 数据框
- 更改某些单元格中的值
- 根据公式计算单元格值
- 最后,将该文件另存为 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[=36= 中一定有问题]输出。
我发现了问题和混乱的解决方法。
Problem:openpyxl 保存时不会保持类型完整。 processing.xlsx 的大小减少了 10kb。因此,pandas读作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')
这是我正在尝试做的事情
- 将包含公式的 Excel 文件读入 pandas 数据框
- 更改某些单元格中的值
- 根据公式计算单元格值
- 最后,将该文件另存为 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[=36= 中一定有问题]输出。
我发现了问题和混乱的解决方法。 Problem:openpyxl 保存时不会保持类型完整。 processing.xlsx 的大小减少了 10kb。因此,pandas读作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')