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
Barbara Streisandoriginal
2024-12-03 15:02:11402parcourir

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')

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')

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)

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!

Déclaration:
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