Экспортируйте многие небольшие DataFrames в единственный рабочий лист Excel

С этот код, возможно экспортировать каждую структуру данных в новом рабочем листе, повторяющем список структур данных:

def save_xls(list_dfs, xls_path):
    writer = ExcelWriter(xls_path)
    for n, df in enumerate(list_dfs):
        df.to_excel(writer,'sheet_dati%s' % n)
    writer.save()
save_xls(list_dfs, xls_path)

Но его возможное, чтобы экспортировать две или больше структуры данных в единственном рабочем листе?

4
добавлено отредактировано
Просмотры: 2
nl ja de

4 ответы

Что-то вроде этого:?

from pandas import ExcelWriter
def dfs2xlsx(list_dfs,xls_path = None):
    #save_xls([df1,df2],'output1.xlsx')
    if xls_path == None :
        xls_path = '~tmp.xlsx'
    writer = ExcelWriter(xls_path)
    i=0
    for n, df in enumerate(list_dfs):
        df.to_excel(writer,'Sheet1',startcol=i,startrow =2)
        i+= len(df.columns) + 2
    writer.save()
    os.system('start excel.exe %s' %(writer.path ))
11
добавлено
Большой ответ. Спасибо очень.
добавлено автор kawing-chiu, источник

Если вы хотите иметь многократный , DataFrames на том же самом покрывают , как вы объединили бы их? Вместо этого слияние, соединение, или связывают их в сингл DataFrame заранее как панды дает вам многократные способы сделать так. И затем сделайте свой экспорт.

5
добавлено

Я думаю, что вы собираетесь быть лучшим выполнением a concat из этих DataFrames прежде экспортирующий (через to_excel). Это:

pd.concat(list_dfs).to_excel(xls_path)
3
добавлено
+1 для Мануэля, перед пандами. У ExcelWriter есть метод писать-рядов, который мог использоваться с этой целью. Но я заметил, что последняя версия удаляет этот метод. Я иногда утверждал бы, что у людей есть некоторые dataframs, у которых есть серьезное основание, которое будет отделено.
добавлено автор wiswit, источник
больше комментариев: Я просто замечаю теперь, что у вас есть startrow и startcol в pa. Метод DataFrame.to_excel, таким образом, одна работа прокипы должна вычислить длину, которой было нужно.
добавлено автор wiswit, источник
@ManuelZompetta, сливающийся у панд сам isn' t слишком хитрый, всего наилучшего:)
добавлено автор Andy Hayden, источник
Спасибо, но интеграция структур данных грязно (они слиты вместе а не в последовательности), когда экспортируется на листе. К сожалению, я думаю, что мне придется изучить много слияния, присоединиться, связать функции, чтобы иметь применимые и правильно форматированные данные по листу. Так или иначе эта команда полезна также. Спасибо. M
добавлено автор Manuel Zompetta, источник

+1 для ответа ashkan. Этот метод позволяет вам писать заголовки многократно и делать вещи как отъезд пространства между отдельным dataframes намного более легко, чем вставка чистых рядов в один больший concat'd dataframe. Например:

writer = pd.ExcelWriter(os.path.join(filepath, filename))
for item in list_of_dataframes:
    item.to_excel(writer, "sheetname", startcol=0, startrow=n)
    n += len(item.index) + 2
writer.save()

Это позволяет вам писать многократный (возможно отличающийся или не связанный) dataframes в, каждый превосходит лист, один за другим, оставляя пустую строку между каждым, поскольку вы спускаетесь по странице.

3
добавлено
Эта почта ужасно близко к тому, чтобы быть комментарием относительно другого ответа, а не it' s владеют автономной почтой. Если you' ve получил дополнительную информацию, чтобы добавить к ответу, that' s прекрасный. Но просто комментарий почты - то, для чего комментарии.
добавлено автор gunr2171, источник
Как новый участник я был неспособен прокомментировать, я попробовал это сначала. Известный в следующий раз:)
добавлено автор AndrewH, источник