为什么在 Openpyxl 保存数据帧后 Pandas return 空白单元格?

Why would Pandas return blank cells after the dataframe is saved by Openpyxl?

我有一个大数据集,我使用 read-excel 将其拉入 pandas。我使用数据创建一个新列,然后使用 openpyxl 将新列写入 Excel。问题是,如果我再次读取该文件,原始数据将被读取为空白值。到目前为止,我发现的唯一解决方法是重写原始数组。为什么会这样?

更新 1:即使我更改 pd.read_excel(engine='openpyxl')

也是如此

更新 2:这里举例说明:

test.xlsm

import pandas as pd
import openpyxl as xl
from openpyxl.utils.dataframe import dataframe_to_rows

df = pd.read_excel('test.xlsm', engine='openpyxl')

print(df)

df['Col_4'] = df['Col_3'].apply(lambda x: x*2)

wb = xl.load_workbook('test.xlsm')
ws = wb.active
df = df['Col_4'].to_frame()
rowsdf = dataframe_to_rows(df, index = False, header = False)
for row_indexdf, rowdf in enumerate(rowsdf, 2):
    for column_indexdf, valuedf in enumerate(rowdf, 4):
        ws.cell(row=row_indexdf, column = column_indexdf, value = valuedf)

wb.save('test.xlsm')

第一次运行:

   Col_1  Col_2  Col_3
0      1      6     11
1      2      7     12
2      3      8     13

第二次运行:

   Col_1  Col_2  Col_3  Unnamed: 3
0      1    NaN    NaN          22
1      2    NaN    NaN          24
2      3    NaN    NaN          26

为什么后两列现在是空白的?我没有写过它们......我不认为。

openpyxlpandas 都不计算 excel 公式。在pandas中打开文件等同于在data_only=True模式中用openpyxl打开文件。

所以在这里,当您保存您编写的文件时,会出现一堆 NaN,因为 excel 从来没有机会评估更改后的 sheet。

有趣的是,如果您使用 openpyxl 打开文件并进一步研究其中一个 NaN 单元格,预期的公式仍然存在!