Heim > Backend-Entwicklung > Python-Tutorial > Wie füge ich einen Pandas-DataFrame an eine vorhandene Excel-Tabelle an, ohne Daten zu überschreiben?

Wie füge ich einen Pandas-DataFrame an eine vorhandene Excel-Tabelle an, ohne Daten zu überschreiben?

Barbara Streisand
Freigeben: 2024-12-03 15:02:11
Original
361 Leute haben es durchsucht

How to Append a Pandas DataFrame to an Existing Excel Sheet Without Overwriting Data?

Vorhandene Excel-Tabelle mit neuem Datenrahmen mit Python Pandas anhängen

Herausforderung:

Neuen Datenrahmen an das Ende eines anhängen vorhandene Excel-Tabelle, ohne die vorhandene zu überschreiben Daten.

Lösung:

Vor Pandas Version 1.4.0 musste beim Anhängen an eine vorhandene Excel-Tabelle der Index der neuen Daten manuell mit dem vorhandenen Blatt abgeglichen werden und wieder speichern.

Verbesserte Lösung für Pandas >= 1.4.0:

Pandas 1.4.0 und spätere Versionen enthalten eine „Overlay“-Option in der ExcelWriter-Funktion, die das Anhängen an ein vorhandenes Blatt ermöglicht, ohne den vorhandenen Inhalt zu überschreiben.

appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'), sheet_name='Sheet1', mode='a', if_sheet_exists='overlay')
Nach dem Login kopieren

Alternative Lösung für Pandas < 1.4.0:

def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None, **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.
    """
    writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a')
    if sheet_name in writer.book.sheetnames:
        # try to open an existing workbook
        writer.book = load_workbook(filename)
        # truncate sheet
        if startrow is None and sheet_name in writer.book.sheetnames:
            startrow = writer.book[sheet_name].max_row
        # 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}
    else:
        # file doesn't exist, we are creating a new one
        startrow = 0
    # write out the DataFrame to an ExcelWriter
    df.to_excel(writer, sheet_name=sheet_name, **to_excel_kwargs)
    writer.close()
    writer.save()

appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'), sheet_name='Sheet1', mode='a', if_sheet_exists='overlay')
Nach dem Login kopieren

Beispiel:

import pandas as pd

# Existing data
existing_df = pd.DataFrame({
    'Name': ['John', 'Mary', 'Bob'],
    'Age': [20, 25, 30]
})

# New data to append
new_df = pd.DataFrame({
    'Name': ['Alice', 'Tom'],
    'Age': [35, 40]
})

append_df_to_excel('master_data.xlsx', new_df, sheet_name='Sheet1', startrow=existing_df.shape[0] + 1)
Nach dem Login kopieren

Zusätzliche Überlegungen:

  • Sie können die Startzeile zum Anhängen mit dem Parameter startrow angeben.
  • Sie kann andere Schlüsselwortargumente an die to_excel()-Methode im to_excel_kwargs-Wörterbuch übergeben.
  • Diese Lösung sollte für alle Versionen von Pandas funktionieren, unabhängig von der verwendeten Excel-Engine (z. B. xlrd, openpyxl).

Das obige ist der detaillierte Inhalt vonWie füge ich einen Pandas-DataFrame an eine vorhandene Excel-Tabelle an, ohne Daten zu überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage