Как я могу получить фрейм данных для перезаписи существующего Excel в определенной ячейке с использованием python pandas?

#python #pandas #xlsxwriter

#python #pandas #xlsxwriter

Вопрос:

Я написал ниже, который, похоже, не работает. Я определяю dataframe как d3, как столбец с 20 строками с комментарием «мой комментарий». Затем я пытаюсь добавить это в существующий сохраненный документ Excel в ячейке L2. Фрейм данных печатается и выглядит правильно в IDE, но просто не перезаписывается в excel. любая помощь будет с благодарностью, поскольку я только начинаю с python!

 from openpyxl import load_workbook
import pandas as pd
import xlsxwriter

#create dataframe to be 19 lines with comment "my comment"
comment = "my comment"
df3 = pd.DataFrame([comment]* 20)
print(df3)
wb = load_workbook(r'H:myfile.xlsx')

writer = pd.ExcelWriter(r'H:myfile', engine='xlsxwriter')
df3.to_excel(writer,sheet_name='mysheet', startrow = 2, startcol = 12)
wb.save(r'H:myfile.xlsx')
print("done")

 

Ответ №1:

Насколько я могу судить, вы делаете несколько вещей одновременно, которые сводят на нет эффект друг друга. Почему вы вообще используете openpyxl?

Вы загружаете рабочую книгу из файла Excel с помощью openpyxl, а load_workbook затем переопределяете файл Excel фреймом данных pandas, после чего результат должен быть таким, какой вы хотите. Но после этого вы снова переопределяете файл Excel содержимым загруженной книги, которое вы загрузили до изменений, внесенных с помощью pandas, что восстанавливает файл Excel в исходное состояние.

Избавьтесь от каждой строки, включающей openpyxl, и она должна работать.

 import pandas as pd
import xlsxwriter

#create dataframe to be 19 lines with comment "my comment"
comment = "my comment"
df3 = pd.DataFrame([comment]* 20)
print(df3)

writer = pd.ExcelWriter(r'H:myfile', engine='xlsxwriter')
df3.to_excel(writer,sheet_name='mysheet', startrow = 2, startcol = 12)
print("done")
 

Если вы хотите изменить свой файл Excel с помощью pandas, вам не нужен openpyxl, если вы хотите изменить свой Excel с помощью openpyxl, вам не нужны pandas.

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

1. Большое вам спасибо, это имеет смысл. Я не понимал, что переопределяю изменения pandas с помощью open pyxl, поэтому удалил это. Единственное, что изменения, похоже, не перезаписывают excel. Когда я также смотрю на дату последнего изменения в моем Excel, она не обновляется…

Ответ №2:

из документации: «обратите внимание, что создание объекта ExcelWriter с уже существующим именем файла приведет к удалению содержимого существующего файла»

так что да, вам нужен openpyxl или создайте все, что вы хотите видеть в файле внутри python.