Pandas 写入 excel 在使用 openpyxl 时给出警告

Pandas writing to excel gives warning when using openpyxl

我正在使用以下代码:

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

def dump2ExcelTest(df, fname, sheetNameIn='Sheet1'):
    if os.path.exists(fname):
        writer = pd.ExcelWriter(fname, engine='openpyxl', mode='a')
        book = load_workbook(fname)
        writer.book = book
    else:
        writer = pd.ExcelWriter(fname, engine='openpyxl', mode='w')

    df.to_excel(writer, sheet_name = sheetNameIn)
    writer.save()
    writer.close()

x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
dump2ExcelTest(df1, r'Y:\summary\test3.xlsx')

在尝试打开 test3.xlsx 时收到以下警告 window:

但是,如果我只执行 df1.to_excel(r'Y:\summary\test3.xlsx'),那么 test3.xlsx 可以正常打开。

我不知道该怎么办,因为日志文件中没有任何内容。

我认为 ExcelWriter 打开文件和跟踪现有工作簿内容的方式是问题所在。我不确定引擎盖下究竟发生了什么,但你必须两者都

  • 为附加
  • 指定正确的startrow
  • 复制sheet信息到writer

我在 Python 中使用了上下文管理器来获得更简洁的语法。 这是您的示例,但可以根据需要正确编写和附加。

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

def dump2ExcelTest(df, fname, sheetNameIn='Sheet1'):
    if os.path.exists(fname) is False:
        df.to_excel(fname, engine='openpyxl')

    start_row = 0
    with pd.ExcelWriter(fname, engine='openpyxl', mode='a') as writer:
        writer.book = load_workbook(fname)

        if sheetNameIn not in writer.book.sheetnames:
            raise ValueError(f"sheet {sheetNameIn} not in workbook")

        # grab the proper start row and copy existing sheets to new writer
        start_row = writer.book[sheetNameIn].max_row
        writer.sheets = {ws.title:ws for ws in writer.book.worksheets}

        df.to_excel(writer, sheetNameIn, startrow=start_row, header=False)

x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)

dump2ExcelTest(df1, "test3.xlsx")

更多细节和类似问题