Добавить данные в конец существующего Excelsheet - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу добавить pandas DataFrame к существующему листу Excel mysheet1.
Я разработал минимальный воспроизводимый пример ниже, который создает два df (df1 и df2).
Пример сохраняет первый df (df1) с функцией pandas .to_excel для имитации существующего файла Excel.

Проблема с примером ниже состоит в том, что он не добавляется в конец существующего листа mysheet1, а скорее создает второй лист с именем mysheet11.

. Как мне сделать так, чтобы содержимое df2 вместо этого добавлялось к исходному листу mysheet1

Edit1
Файл Excel, в котором я хочу прочитать, содержит несколько листов, которые не должны быть перезаписаны, но сохранены mysheet1, однако с 1 пустой строкой между исходными данными листа и вновь добавленным df2.
Edit3
Фильтрация для [None] с помощью и, если в конечном for-l oop была решена пустая строка Спасибо всем.

# ... Continuation of previous code
# Solution provided by emiljoj
from openpyxl import Workbook #reading/loading workbooks
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows #appending dataframes to rows

wb=load_workbook(file, read_only=False)
ws_mysheet1 = wb["mysheet1"]

for r in dataframe_to_rows(df2, header=False):
    if not r == [None]:
        ws_mysheet1.append(r)
    else:
        print("Skipped empty row")

wb.save(file)
wb.close()

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Возможно, вы могли бы объединить файл и фрейм данных в Pandas, а затем сохранить в Excel?

from pandas import read_excel, concat

df1 = read_excel('Input_file.xlsx')

# df2 defined previously

df = concat([df1, df2])

with pd.ExcelWriter('Output_file.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, sheet_name="mysheet1")
1 голос
/ 01 апреля 2020

Альтернативным подходом было бы попытаться отредактировать лист Excel с помощью модуля openpyxl, сначала открыв рабочую книгу, определив соответствующий лист, а затем добавив кадр данных

from openpyxl import Workbook #reading/loading workbooks
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows #appending dataframes to rows

wb=load_workbook('your_workbook_path.xlsx', read_only=False)
ws_mysheet1 = wb["mysheet1"]

for r in dataframe_to_rows(df_to_append, index=False, header=False):
       ws_mysheet1.append(r)
...