Ich möchte Dataframe an Excel anhängen
Dieser Code funktioniert fast wie gewünscht. Es hängt jedoch nicht jedes Mal an. Ich führe es aus und es setzt Datenrahmen in Excel. Aber jedes Mal, wenn ich es ausführen, hängt es nicht an. Ich höre auch, dass openpyxl CPU-intensiv ist, aber nicht von vielen Workarounds hört.
import pandas
from openpyxl import load_workbook
book = load_workbook('C:\\OCC.xlsx')
writer = pandas.ExcelWriter('C:\\OCC.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df1.to_Excel(writer, index = False)
writer.save()
Ich möchte, dass die Daten bei jeder Ausführung angehängt werden. Dies geschieht nicht.
Datenausgabe sieht aus wie Originaldaten:
A B C
H H H
Ich will ein zweites Mal nachlaufen
A B C
H H H
H H H
Entschuldigung, wenn dies offensichtlich ist, bin ich neu in Python und Beispiele, die ich praktiziere, funktionierten nicht wie gewünscht.
Die Frage ist - wie kann ich bei jeder Ausführung Daten anhängen? Ich versuche zu xlsxwriter zu wechseln, aber AttributeError: 'Workbook' object has no attribute 'add_format'
zunächst ist dieser Beitrag der erste Teil der Lösung, in dem Sie startrow=
: angeben sollten. Vorhandene Excel-Tabelle mit neuem Datenrahmen mit Python-Pandas anhängen .
sie könnten auch header=False
. in Betracht ziehen, so dass es so aussehen sollte:
df1.to_Excel(writer, startrow = 2,index = False, Header = False)
wenn Sie möchten, dass das Blatt automatisch an das Ende des Arbeitsblatts gelangt und Ihr Dokument angehängt wird, verwenden Sie:
startrow = writer.sheets['Sheet1'].max_row
und wenn Sie möchten, dass alle Blätter in der Arbeitsmappe behandelt werden:
for sheetname in writer.sheets:
df1.to_Excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False,header= False)
btw: für den writer.sheets
könnte man das Wörterbuchverstehen verwenden (ich denke, es ist sauberer, aber das liegt an Ihnen, es erzeugt die gleiche Ausgabe):
writer.sheets = {ws.title: ws for ws in book.worksheets}
so wird der vollständige Code sein:
import pandas
from openpyxl import load_workbook
book = load_workbook('test.xlsx')
writer = pandas.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
for sheetname in writer.sheets:
df1.to_Excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False,header= False)
writer.save()
Hier ist eine Hilfsfunktion:
def append_df_to_Excel(filename, df, sheet_name='Sheet1', startrow=None,
truncate_sheet=False,
**to_Excel_kwargs):
"""
Append a DataFrame [df] to existing Excel file [filename]
into [sheet_name] Sheet.
If [filename] doesn't exist, then this function will create it.
Parameters:
filename : File path or existing ExcelWriter
(Example: '/path/to/file.xlsx')
df : dataframe to save to workbook
sheet_name : Name of sheet which will contain DataFrame.
(default: 'Sheet1')
startrow : upper left cell row to dump data frame.
Per default (startrow=None) calculate the last row
in the existing DF and write to the next row...
truncate_sheet : truncate (remove and recreate) [sheet_name]
before writing DataFrame to Excel file
to_Excel_kwargs : arguments which will be passed to `DataFrame.to_Excel()`
[can be dictionary]
Returns: None
"""
from openpyxl import load_workbook
# ignore [engine] parameter if it was passed
if 'engine' in to_Excel_kwargs:
to_Excel_kwargs.pop('engine')
writer = pd.ExcelWriter(filename, engine='openpyxl')
try:
# try to open an existing workbook
writer.book = load_workbook(filename)
# get the last row in the existing Excel sheet
# if it was not specified explicitly
if startrow is None and sheet_name in writer.book.sheetnames:
startrow = writer.book[sheet_name].max_row
# truncate sheet
if truncate_sheet and sheet_name in writer.book.sheetnames:
# index of [sheet_name] sheet
idx = writer.book.sheetnames.index(sheet_name)
# remove [sheet_name]
writer.book.remove(writer.book.worksheets[idx])
# create an empty sheet [sheet_name] using old index
writer.book.create_sheet(sheet_name, idx)
# copy existing sheets
writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
except FileNotFoundError:
# file does not exist yet, we will create it
pass
if startrow is None:
startrow = 0
# write out the new sheet
df.to_Excel(writer, sheet_name, startrow=startrow, **to_Excel_kwargs)
# save the workbook
writer.save()
Anwendungsbeispiele:
filename = r'C:\OCC.xlsx'
append_df_to_Excel(filename, df)
append_df_to_Excel(filename, df, header=None, index=False)
append_df_to_Excel(filename, df, sheet_name='Sheet2', index=False)
append_df_to_Excel(filename, df, sheet_name='Sheet2', index=False, startrow=25)
Ich habe versucht, ein Excel-Dokument zu lesen, es in ein Dataframe zu legen und das Datenframe aus Excel mit dem gewünschten Dataframe zu verknüpfen. Es hat für mich funktioniert.
def append_df_to_Excel(df, Excel_path):
df_Excel = pd.read_Excel(excel_path)
result = pd.concat([df_Excel, df], ignore_index=True)
result.to_Excel(excel_path, index=False)
df = pd.DataFrame({"a":[11,22,33], "b":[55,66,77]})
append_df_to_Excel(df, r"<path_to_dir>\<out_name>.xlsx")