'2024/08/10'에 해당되는 글 1건

  1. 2024.08.10 :: [Python] replace 와 overlay 차이
카테고리 없음 2024. 8. 10. 13:48
반응형

협업을 하다 보면, 엉뚱한(?) 문제로 고생을 하는 경우가 있습니다.

이번에 생각지도 못한 부분에 오류(?)가 있어 정리를 합니다.(아래에 제가 사용하는 코드 일부를 발취하였습니다.)

def F_Base_MakeFile(file_path, dataDf, sheetName=Get_strDay()[2:]):

    # 파일이 존재하지 않으면 파일 생성
    if not os.path.exists(file_path):
        dataDf.to_excel(file_path, index=False, sheet_name=sheetName)
        print(f"[F_Base_MakeFile]{file_path} 파일 생성: 시트이름: {sheetName}")

    else:
        # 파일이 존재하면, 엑셀 파일을 불러옴
        book = load_workbook(file_path)

        if sheetName in book.sheetnames:
            # 시트가 존재하면 기존 데이터를 불러옴
            existing_df = pd.read_excel(file_path, sheet_name=sheetName)

            # 컬럼이 일치하는지 확인
            if list(existing_df.columns) == list(dataDf.columns):
                # 컬럼이 일치하면 데이터를 추가
                with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
                    dataDf.to_excel(writer, index=False, header=False, startrow=len(existing_df) + 1,sheet_name=sheetName)
                print(f"[F_Base_MakeFile]{file_path}파일 시트{sheetName}에 데이터 추가완료.")
            else:
                raise ValueError(f"[F_Base_MakeFile]Error: 시트{sheetName}컬럼과 입력 DF 컬럼 불일치")
        else:
            # 시트가 존재하지 않으면 새로운 시트를 생성
            with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
                dataDf.to_excel(writer, index=False, sheet_name=sheetName)
            print(f"[F_Base_MakeFile]{file_path} 파일에 새로운 시트{sheetName}생성")

 

위에 보면 아래와 엑셀 파일 생성하는 부분에 'overlay'부분이 보입니다.

1.'overlay'는 기존 시트를 유지하면서, 새 데이터를 덮어씁니다.
새 데이터프레임의 내용이 기존 시트의 해당 위치에 쓰여지며, 기존 데이터와 겹치는 부분만 업데이트되게 됩니다. 또한 기존 시트의 내용 중에서 새로 작성한 데이터프레임과 겹치지 않는 부분은 그대로 유지됩니다. 예를 들어, 새 데이터프레임에 포함되지 않은 열이나 행은 기존 시트에 그대로 남아있습니다.

 

2. ' replace'는 기존 시트를 완전히 대체합니다.

지정된 시트 이름이 이미 존재할 경우, 해당 시트의 모든 데이터를 삭제하고 새로운 데이터로 완전히 덮어쓰게 됩니다.
기존 시트의 구조(예: 셀의 서식, 데이터)가 사라지고, 새로 작성한 데이터프레임만 시트에 남게 됩니다.

 

 

 

 

반응형
posted by choiwonwoo
: