Я пытаюсь создать новую электронную таблицу и рабочую таблицу, содержащую заголовки столбцов из кадра данных. Затем я хочу добавлять новые данные на лист при каждой итерации цикла For
. Вероятно, у меня большой объем данных, и поэтому я подумал, что необходимо будет записывать их в Excel после каждой итерации, а не писать весь DF в конце.
Код «Добавить данные к существующему листу» в цикле For
работает правильно (т.е. дает мне 3 строки значений) сам по себе, если я пишу в электронную таблицу, которая уже содержит заголовки столбцов, которые я создали в Excel. Но когда я запускаю код, как вы видите ниже, я получаю только заголовки столбцов и значения из последней итерации цикла For
. Я, очевидно, упускаю что-то простое, но не могу решить это. Любая помощь будет высоко ценится
import openpyxl as xl
import pandas as pd
import numpy as np
import datetime as dt
fn = '00test101.xlsx'
# Create new workbook
wb = xl.Workbook()
wb.save(fn)
book = xl.load_workbook(fn)
writer = pd.ExcelWriter(fn,engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
# Write DF column names to new worksheet
DF = pd.DataFrame(columns=['A','B','C'])
DF.to_excel(writer, 'ABC', header=True, startrow=0)
writer.save()
for i in range(3):
a = np.array([1,3,6]) * i
# Overwrite existing DF and add data
DF = pd.DataFrame(columns=['A','B','C'])
DF.loc[dt.datetime.now()] = a
# Append data to existing worksheet
book = xl.load_workbook(fn)
writer = pd.ExcelWriter(fn,engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
DF.to_excel(writer, 'ABC', header=None, startrow=book.active.max_row)
writer.save()
# Remove unwanted default worksheet
wb = xl.load_workbook(fn)
def_sheet = wb.get_sheet_by_name('Sheet')
wb.remove_sheet(def_sheet)
wb.save(fn)