programing

Pandas 모드='a', if_sheet_model='model'이(가) 작동하지 않습니다.

oldcodes 2023. 8. 22. 22:27
반응형

Pandas 모드='a', if_sheet_model='model'이(가) 작동하지 않습니다.

아래 코드를 사용하더라도 .xlsx 파일의 각 시트에 있는 내용은 추가되지 않고 덮어씁니다.무엇이 누락되었습니까?

writer = pd.ExcelWriter(excelfilepath, engine='openpyxl', mode='a', if_sheet_exists='overlay')

df1.to_excel(writer, sheet_name='Núcleo de TRIAGEM')

df2.to_excel(writer, sheet_name='Núcleo de FALÊNCIAS')

df3.to_excel(writer, sheet_name='RE - Triagem')

df4.to_excel(writer, sheet_name='RE - Falências')

writer.save()

저는 이것이 전형적이지 않다는 것을 압니다, 그리고 아마도 미래의 팬더 버전에서 고쳐질 것입니다, 하지만 사용합니다.startrow버전이 있는1.4.2저를 위해 일했습니다.다음 코드를 사용해 보십시오.

writer = pd.ExcelWriter(excelfilepath, engine='openpyxl', mode='a', if_sheet_exists='overlay')

df1.to_excel(writer, sheet_name='Núcleo de TRIAGEM', startrow=writer.sheets['Núcleo de TRIAGEM'].max_row, header=None)

df2.to_excel(writer, sheet_name='Núcleo de FALÊNCIAS', startrow=writer.sheets['Núcleo de FALÊNCIAS'].max_row, header=None)

df3.to_excel(writer, sheet_name='RE - Triagem', startrow=writer.sheets['RE - Triagem'].max_row, header=None)

df4.to_excel(writer, sheet_name='RE - Falências', startrow=writer.sheets['RE - Falências'].max_row, header=None)

writer.save()

미래의 모든 사람들을 위해.Pandas 버전을 확인하십시오.if_sheet_exists='overlay'작동하지 않습니다.그것은 버전 1.4.0에서 판다에 추가되었습니다.업데이트를 시도해 보십시오.

분실된 것이 아무것도 없다.오버레이 옵션의 목적은 기존 데이터를 덮어쓰고 그 아래에 새 데이터를 추가하는 것이 아닙니다.
이전 데이터는 실제로 현재 작성 중인 새 데이터보다 큰 부분에 대해서만 유지됩니다. 또는 시작 행을 그 아래에 새 데이터를 쓸 수 있을 정도로 높은 값으로 명시적으로 설정하는 경우에만 유지됩니다.

이미 제안한 대로 다음과 같이 수행할 수 있습니다.

df1.to_excel(writer, sheet_name='sheet1', startrow=writer.sheets['sheet1'].max_row, header=None)

이 모든 것은 해당 옵션에 대해 제안된 초기 이름이 오버레이가 아닌 overwrite_cells임을 알 때 더욱 분명해집니다.

저는 제 버전의 판다를 업그레이드함으로써 이것을 고칠 수 있었습니다.

먼저 판다 버전을 확인해야 합니다.이 작업을 수행할 수 있습니다.

print(pandas.__version__)

저 같은 경우에는 판다 1.3.5를 사용했습니다.나는 그 다음에 달렸습니다.

pip install --upgrade pandas

그런 다음 이전 버전을 제거하고 새 버전을 설치합니다.또한, 제가 이것을 실행했을 때 이것은 작동하지 않았습니다.sudo또는 admin 사용자.

우리는 유틸리티 기능을 만들어 excel로 쓸 수 있습니다.

def save_excel_sheet(df, excel_path, sheet_name):
    if not os.path.exists(excel_path):
        df.to_excel(excel_path, sheet_name=sheet_name, index=False)
    else:
        with pd.ExcelWriter(excel_path, engine='openpyxl', if_sheet_exists='overlay', mode='a') as writer:
            df.to_excel(writer, sheet_name=sheet_name, startrow=writer.sheets[sheet_name].max_row, header=None, index=False)

그리고 아래와 같은 함수를 호출합니다.

save_excel_sheet(df1, excel_path, sheet_name='Núcleo de TRIAGEM')

save_excel_sheet(df3, excel_path, sheet_name='RE - Triagem')

파일이 없는 경우 파일을 만들고 파일이 있는 경우 제공된 시트에 추가합니다.

판다 버전 - 2.0.2

언급URL : https://stackoverflow.com/questions/71483123/pandas-mode-a-if-sheet-exists-overlay-not-working

반응형