Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menambahkan Pandas DataFrame pada Helaian Excel Sedia Ada Tanpa Mengganti Data?

Bagaimana untuk Menambahkan Pandas DataFrame pada Helaian Excel Sedia Ada Tanpa Mengganti Data?

Barbara Streisand
Barbara Streisandasal
2024-12-03 15:02:11402semak imbas

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

Tambah Helaian Excel Sedia Ada dengan Bingkai Data Baharu Menggunakan Python Panda

Cabaran:

Tambahkan bingkai data baharu pada penghujung sesuatu helaian Excel sedia ada tanpa menimpa helaian sedia ada data.

Penyelesaian:

Sebelum Pandas versi 1.4.0, menambahkan pada helaian Excel sedia ada yang terlibat secara manual memadankan indeks data baharu dengan helaian sedia ada dan menyimpannya semula.

Penyelesaian yang Diperbaiki untuk Panda >= 1.4.0:

Pandas 1.4.0 dan versi yang lebih baru menyertakan pilihan "tindanan" dalam fungsi ExcelWriter yang membenarkan penambahan pada helaian sedia ada tanpa menulis ganti kandungan sedia ada.

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

Penyelesaian Alternatif untuk Panda < 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')

Contoh:

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)

Pertimbangan Tambahan:

  • Anda boleh menentukan baris permulaan untuk ditambahkan menggunakan baris permulaan parameter.
  • Anda boleh menghantar hujah kata kunci lain kepada kaedah to_excel() dalam kamus to_excel_kwargs.
  • Penyelesaian ini harus berfungsi untuk semua versi Panda, tanpa mengira enjin Excel yang digunakan (cth. , xlrd, openpyxl).

Atas ialah kandungan terperinci Bagaimana untuk Menambahkan Pandas DataFrame pada Helaian Excel Sedia Ada Tanpa Mengganti Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn