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")
更多细节和类似问题
我正在使用以下代码:
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 打开文件和跟踪现有工作簿内容的方式是问题所在。我不确定引擎盖下究竟发生了什么,但你必须两者都
- 为附加 指定正确的
- 复制sheet信息到
writer
startrow
我在 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")
更多细节和类似问题