Как написать новую строку в pd.ExcelWriter с использованием движка xlsxwritter — в python внизу?

#python #excel #pandas #xlsxwriter #pandas.excelwriter

#python #excel #панды #xlsxwriter #pandas.excelwriter

Вопрос:

У меня есть несколько фреймов данных pandas, и я использую ExcelWriter для создания листа Excel. Я обычно использую команду ниже

 writer = pd.ExcelWriter(file_name, engine='xlsxwriter')
 

Весь мой фрейм данных переходит на один лист Excel, и я хочу написать длинное предложение после последнего фрейма данных. Моя программа автоматизирована, и я не знаю точно длину фрейма данных каждый раз. Поэтому я не могу использовать что-то вроде приведенного ниже. Я имею в виду, что я не могу поместить что-то вроде ‘B44: F46’

 import xlsxwriter
workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()

## adding 5-6 data frames

header2 = workbook.add_format({
    'bold':     True,
    'align':    'center',
    'border':   6,
    'valign':   'vcenter',
    'fg_color': '#D7E4BC',
    'font_name':'Calibri',
    'font_size': 12

})

worksheet.merge_range('B44:F46', "CompanyName:ABC n Country:USA", header2)


workbook.close()
 

Есть ли способ сделать это на python?

Любое предложение будет оценено. Заранее спасибо!!

Ответ №1:

Есть несколько вещей, которые вам нужно сделать, чтобы это сработало:

  • Отслеживайте конечную строку в выходных фреймах данных, используя df.shape или len(df)
  • Используйте (row, col) синтаксис в merge_range() вместо синтаксиса диапазона A1
  • Добавить text_wrap в формат

Вот рабочий пример:

 import pandas as pd


# Create some Pandas dataframes from some data.
df1 = pd.DataFrame({'Data 1': [11, 12]})
df2 = pd.DataFrame({'Data 2': [21, 22, 23]})
df3 = pd.DataFrame({'Data 3': [31, 32, 33, 34]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_example.xlsx', engine='xlsxwriter')

start_row = 0

# Output the data frames and keep track of the start/end row.
for df in (df1, df2, df3):
    df.to_excel(writer, sheet_name='Sheet1', startrow=start_row, index=False)
    start_row  = df.shape[0]   1

# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# Add a format
header2 = workbook.add_format({
    'bold':     True,
    'align':    'center',
    'border':   6,
    'valign':   'vcenter',
    'fg_color': '#D7E4BC',
    'font_name': 'Calibri',
    'font_size': 12,
    'text_wrap': True
})

# Write a merge range.
start_col = 0
end_col = 3

worksheet.merge_range(start_row, start_col, start_row   1, end_col,
                      "CompanyName: ABCnCountry: USA", header2)

# Close the Pandas Excel writer and output the Excel file.
writer.save()
 

Вывод:

введите описание изображения здесь

Комментарии:

1. снова быть первым, кто отвечает на вопросы о своем собственном проекте 1 Джон!

2. Спасибо @KevinG. Для чего это стоит, мне действительно нравится видеть ответы xlsxwriter от других людей, поскольку это показывает, что им удалось отклонился от документации. Я обычно взвешиваю только в том случае, если нет полного ответа или если ответ неочевиден.

Ответ №2:

Получите количество строк во фреймах данных (при условии, что у вас есть 2 фрейма данных df0 и df1)

 rows = len(df0.index)
rows  = len(df1.index)
 

Затем добавьте их в строку, куда вы добавляете последнюю строку

 worksheet.merge_range('B' str(rows) ':F46', "CompanyName:ABC n Country:USA", header2)