为什么在 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
为什么后两列现在是空白的?我没有写过它们......我不认为。
openpyxl
和 pandas
都不计算 excel 公式。在pandas
中打开文件等同于在data_only=True
模式中用openpyxl
打开文件。
所以在这里,当您保存您编写的文件时,会出现一堆 NaN,因为 excel 从来没有机会评估更改后的 sheet。
有趣的是,如果您使用 openpyxl
打开文件并进一步研究其中一个 NaN 单元格,预期的公式仍然存在!
我有一个大数据集,我使用 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
为什么后两列现在是空白的?我没有写过它们......我不认为。
openpyxl
和 pandas
都不计算 excel 公式。在pandas
中打开文件等同于在data_only=True
模式中用openpyxl
打开文件。
所以在这里,当您保存您编写的文件时,会出现一堆 NaN,因为 excel 从来没有机会评估更改后的 sheet。
有趣的是,如果您使用 openpyxl
打开文件并进一步研究其中一个 NaN 单元格,预期的公式仍然存在!