[英]Add worksheet to existing Excel file with pandas
# Set the working folder to the same folder as the script
os.chdir(os.path.dirname(os.path.abspath(__file__)))
test = send_request().content
df = pd.read_csv(io.StringIO(test.decode('utf-8')))
writer = pd.ExcelWriter('NHL_STATS_JSB_final.xlsx', \
engine = 'xlsxwriter')
df.to_excel(writer, 'Player statistics', index=False)
writer.save()
我不明白为什么,但我正在尝试将工作表Player statistics
添加到我当前的NHL_STATS_JSB_final.xlsx
文件中,但它不起作用。 我的代码没有将工作表添加到文件中,而是使用当前文件并擦除所有以前的工作表以添加新的工作表。
如何在擦除所有其他工作表的情况下将Player statistics
添加到我当前的 Excel 文件中?
这是我的一个项目的代码片段。 这应该完全符合你的要求。 您需要使用openpyxl而不是xlsxwriter来更新现有文件。
writer = pd.ExcelWriter(file_name, engine='openpyxl')
if os.path.exists(file_name):
book = openpyxl.load_workbook(file_name)
writer.book = book
df.to_excel(writer, sheet_name=key)
writer.save()
writer.close()
正如OP所提到的,xlsxwriter将覆盖您现有的工作簿。 Xlsxwriter用于编写原始的.xlsx文件。 另一方面,Openpyxl可以修改现有的.xlsx文件。
@Brad Campbell使用openpyxl回答是最好的方法。 由于OP使用的是xlsxwriter引擎,我想证明可以读入现有的.xlsx文件,然后创建一个新的工作簿(同名),其中包含原始工作表中的数据和您的新工作表我想补充一下。
import pandas as pd
import os
xl = pd.ExcelFile('NHL_STATS_JSB_final.xlsx')
sheet_names = xl.sheet_names # a list of existing sheet names
#the next three lines are OPs original code
os.chdir(os.path.dirname(os.path.abspath(__file__)))
test = send_request().content
df = pd.read_csv(io.StringIO(test.decode('utf-8')))
#beginning the process of creating new workbook with the same name
writer = pd.ExcelWriter('NHL_STATS_JSB_final.xlsx', engine = 'xlsxwriter')
d = {} #creating an empty dictionary
for i in range (0, len(sheet_names)):
current_sheet_name = sheet_names[i]
d[current_sheet_name] = pd.read_excel('NHL_STATS_JSB_final.xlsx', sheetname = i)
d[current_sheet_name].to_excel(writer, '%s' % (current_sheet_name), index=False)
# adding in the new worksheet
df.to_excel(writer, 'Player statistics', index=False)
writer.save()
# I needed to append tabs if condition existed so
# ended up with this:
def create_POC_file_tab(df, sheetname):
# do stuff like extracting df_SA from df,
# getting POC_file name for each df_SA, etc.
#
if len(df_SA) > 0: # extracted dataframe contains data
POC_file = PATH + POC_file
try:
# mode='a' tries to append a new tab if the workbook exists
writer_SA = pd.ExcelWriter(POC_file + ' ' + process_date + '.xlsx',
engine='openpyxl', mode='a')
print(POC, 'File exists. Appending to POC', POC, sheetname)
except:
# mode='w' creates a new workbook
writer_SA = pd.ExcelWriter(POC_file + ' ' + process_date + '.xlsx',
engine='openpyxl', mode='w')
print(POC, ' !!!!!!!! Creating !!!!!! ', sheetname)
try:
df_SA.to_excel(writer_SA, sheet_name=sheetname, index=False)
writer_SA.save()
except:
print ("error on writing sheetname: ", sheetname, "for: ",POC)
return
# when I exit the file seems to be closed properly.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.