>백엔드 개발 >파이썬 튜토리얼 >데이터를 덮어쓰지 않고 기존 Excel 시트에 Pandas DataFrame을 추가하는 방법은 무엇입니까?

데이터를 덮어쓰지 않고 기존 Excel 시트에 Pandas DataFrame을 추가하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-03 15:02:11311검색

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

Python Pandas를 사용하여 기존 Excel 시트에 새 데이터 프레임 추가

도전 과제:

새 데이터 프레임을 시트 끝에 추가 기존 Excel 시트를 덮어쓰지 않고 기존 Excel 시트 data.

해결책:

Pandas 버전 1.4.0 이전에는 기존 Excel 시트에 추가할 때 새 데이터의 인덱스를 기존 시트와 수동으로 일치시키는 작업이 포함되었습니다. 다시 저장합니다.

Pandas를 위한 향상된 솔루션 >= 1.4.0:

Pandas 1.4.0 이상 버전에는 ExcelWriter 함수에 기존 내용을 덮어쓰지 않고 기존 시트에 추가할 수 있는 "오버레이" 옵션이 포함되어 있습니다.

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

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

예:

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)

추가 고려 사항:

  • startrow를 사용하여 추가할 시작 행을 지정할 수 있습니다.
  • to_excel_kwargs 사전 내의 to_excel() 메서드에 다른 키워드 인수를 전달할 수 있습니다.
  • 이 솔루션은 사용 중인 Excel 엔진에 관계없이 모든 버전의 Pandas에서 작동합니다(예: , xlrd, openpyxl).

위 내용은 데이터를 덮어쓰지 않고 기존 Excel 시트에 Pandas DataFrame을 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.