Когда вы назначаете и подвергаете возражению переменной, вы действительно назначаете ссылку на этот объект. Поэтому обе переменные s1
и s2
ссылаются на один и тот же объект.
Чтобы создать рабочий лист заранее, вам нужно добавить созданный лист в файл sheets
:
writer.sheets['Validation'] = worksheet
Используя исходный код:
# Creating Excel Writer Object from Pandas
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
writer.sheets['Validation'] = worksheet
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
Если мы посмотрим на функцию панды to_excel
, она использует функцию write_cells
автора sheets
:
excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)
функция write_cells
для xlsxwriter
:
def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0):
# Write the frame cells using xlsxwriter.
sheet_name = self._get_sheet_name(sheet_name)
if sheet_name in self.sheets:
wks = self.sheets[sheet_name]
else:
wks = self.book.add_worksheet(sheet_name)
self.sheets[sheet_name] = wks
Здесь мы видим, что она проверяет sheet_name
в self.sheets
, и поэтому ее необходимо добавить туда.
Я был бы более склонен сначала конкатенацию кадров данных, а затем превратить этот фреймворк в формат excel. Чтобы поместить два кадра данных вместе бок о бок (в отличие от одного над другим), выполните следующее:
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter') # Creating Excel Writer Object from Pandas
workbook=writer.book
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
new_df = pd.concat([df, another_df], axis=1)
new_df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
user3817518: «Пожалуйста, также поделитесь, если есть другой способ поместить многие dataframes в excel с помощью встроенной функциональности df.to_excel!»
Вот моя попытка:
Простой способ собрать много данных на одном листе или на нескольких вкладках. Дайте мне знать, если это сработает!
- Чтобы проверить, просто запустите образцы данных и вторую и третью части кода.
import pandas as pd
import numpy as np
# Sample dataframes
randn = np.random.randn
df = pd.DataFrame(randn(15, 20))
df1 = pd.DataFrame(randn(10, 5))
df2 = pd.DataFrame(randn(5, 10))
# funtion
def multiple_dfs(df_list, sheets, file_name, spaces):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)
row = row + len(dataframe.index) + spaces + 1
writer.save()
# list of dataframes
dfs = [df,df1,df2]
# run function
multiple_dfs(dfs, 'Validation', 'test1.xlsx', 1)
# function
def dfs_tabs(df_list, sheet_list, file_name):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
for dataframe, sheet in zip(df_list, sheet_list):
dataframe.to_excel(writer, sheet_name=sheet, startrow=0 , startcol=0)
writer.save()
# list of dataframes and sheet names
dfs = [df, df1, df2]
sheets = ['df','df1','df2']
# run function
dfs_tabs(dfs, sheets, 'multi-test.xlsx')
writer.sheets['Validation'] = worksheet
, а неsheet
. – Hugues Fontenelle 12 October 2017 в 07:20