Maison > développement back-end > Tutoriel Python > Comment ajouter un DataFrame Pandas à une feuille Excel existante sans écraser les données ?

Comment ajouter un DataFrame Pandas à une feuille Excel existante sans écraser les données ?

Barbara Streisand
Libérer: 2024-12-03 15:02:11
original
392 Les gens l'ont consulté

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

Ajouter une feuille Excel existante avec un nouveau dataframe à l'aide de Python Pandas

Défi :

Ajouter un nouveau dataframe à la fin d'un feuille Excel existante sans écraser la feuille Excel existante data.

Solution :

Avant la version 1.4.0 de Pandas, l'ajout à une feuille Excel existante impliquait de faire correspondre manuellement l'index des nouvelles données avec la feuille existante et enregistrez-le à nouveau.

Solution améliorée pour les pandas >= 1.4.0 :

Pandas 1.4.0 et les versions ultérieures incluent une option « superposition » dans la fonction ExcelWriter qui permet d'ajouter à une feuille existante sans écraser le contenu existant.

appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'), sheet_name='Sheet1', mode='a', if_sheet_exists='overlay')
Copier après la connexion

Solution alternative pour les 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')
Copier après la connexion

Exemple :

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)
Copier après la connexion

Considérations supplémentaires :

  • Vous pouvez spécifier la ligne de départ à ajouter à l'aide du paramètre startrow.
  • Vous peut transmettre d'autres arguments de mots-clés à la méthode to_excel() dans le dictionnaire to_excel_kwargs.
  • Cette solution devrait fonctionner pour toutes les versions de Pandas, quel que soit le moteur Excel utilisé (par exemple, xlrd, openpyxl).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal