source

데이터 프레임을 추가하여 판다와 함께 사용할 수 있습니다.

nicesource 2023. 7. 8. 10:58
반응형

데이터 프레임을 추가하여 판다와 함께 사용할 수 있습니다.

우수한 데이터 프레임을 추가하고 싶습니다.

이 코드는 거의 원하는 대로 작동합니다.매번 추가되는 것은 아니지만요.제가 실행하면 데이터 프레임이 엑셀에 저장됩니다.하지만 실행할 때마다 추가되지 않습니다.또한 openpyxl은 CPU 집약적이지만 많은 해결 방법에 대해서는 듣지 못했습니다.

import pandas
from openpyxl import load_workbook

book = load_workbook('C:\\OCC.xlsx')
writer = pandas.ExcelWriter('C:\\OCC.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

df1.to_excel(writer, index = False)

writer.save()

실행할 때마다 데이터가 추가되기를 원하는데, 이런 일은 일어나지 않습니다.

데이터 출력은 원본 데이터와 유사합니다.

A   B   C
H   H   H

두 번째 실행 후에 원합니다.

A   B    C
H   H    H
H   H    H

만약 이것이 내가 파이썬을 처음 접하는 것과 내가 연습하는 예시들이 원하는 대로 작동하지 않았다는 것이 명백하다면 사과드립니다.

문제는 실행할 때마다 데이터를 추가하는 방법입니다.나는 xlsxwriter로 바꾸려고 노력하지만, 받습니다.AttributeError: 'Workbook' object has no attribute 'add_format'

무엇보다도, 이 게시물은 당신이 명시해야 하는 솔루션의 첫 번째 부분입니다.startrow=Python Panda를 사용하여 기존 Excel 시트를 새 데이터 프레임에 추가

당신은 또한 고려할 수 있습니다.header=False그래서 다음과 같이 보여야 합니다.

df1.to_excel(writer, startrow = 2,index = False, Header = False)

자동으로 시트 끝에 도달하고 df를 추가하려면 다음을 사용합니다.

startrow = writer.sheets['Sheet1'].max_row

워크북의 모든 시트를 검토하려면 다음과 같이 하십시오.

for sheetname in writer.sheets:
    df1.to_excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False,header= False)

btw: 의 경우.writer.sheets사전 이해력을 사용할 수 있습니다(더 깨끗하다고 생각하지만, 그것은 당신에게 달려 있으며, 동일한 출력을 생성합니다).

writer.sheets = {ws.title: ws for ws in book.worksheets}

따라서 전체 코드는 다음과 같습니다.

import pandas
from openpyxl import load_workbook

book = load_workbook('test.xlsx')
writer = pandas.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}

for sheetname in writer.sheets:
    df1.to_excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False,header= False)

writer.save()

사용할 수 있습니다.append_df_to_excel()도우미 기능은 다음 답변에 정의되어 있습니다.

사용 예:

filename = r'C:\OCC.xlsx'

append_df_to_excel(filename, df)

append_df_to_excel(filename, df, header=None, index=False)

append_df_to_excel(filename, df, sheet_name='Sheet2', index=False)

append_df_to_excel(filename, df, sheet_name='Sheet2', index=False, startrow=25)

여기 있는 모든 예는 상당히 복잡합니다.설명서에서 훨씬 더 쉽게 설명할 수 있습니다.

def append_to_excel(fpath, df, sheet_name):
    with pd.ExcelWriter(fpath, mode="a") as f:
        df.to_excel(f, sheet_name=sheet_name)

append_to_excel(<your_excel_path>, <new_df>, <new_sheet_name>)

LibreOffice/OpenOffice Excel 파일에서 이 파일을 사용하면 다음 오류가 발생합니다.

KeyError: "There is no item named 'xl/drawings/drawing1.xml' in the archive"

여기서 언급한 것처럼 openpyxl의 버그입니다.

저는 엑셀을 읽고, 그것을 데이터 프레임에 넣은 다음, 엑셀의 데이터 프레임을 원하는 데이터 프레임과 연결하려고 했습니다.그것은 나에게 효과가 있었다.

def append_df_to_excel(df, excel_path):
    df_excel = pd.read_excel(excel_path)
    result = pd.concat([df_excel, df], ignore_index=True)
    result.to_excel(excel_path, index=False)

df = pd.DataFrame({"a":[11,22,33], "b":[55,66,77]})
append_df_to_excel(df, r"<path_to_dir>\<out_name>.xlsx")

누군가가 필요하다면, 저는 더 쉬운 방법을 찾았습니다.

목록의 행으로 DF 변환
rows = your_df.values.tolist()
워크북 로드
workbook = load_workbook(filename=your_excel)
시트 선택
sheet = workbook[your_sheet]
각 행에 추가할 행을 반복합니다.
for row in rows:
    sheet.append(row)
완료되면 워크북 저장
workbook.save(filename=your_excel)
이 모든 것을 종합하면:
rows = your_df.values.tolist()
workbook = load_workbook(filename=your_excel)
sheet = workbook[your_sheet]
for row in rows:
    sheet.append(row)
workbook.save(filename=your_excel)
def append_to_excel(fpath, df):
 if (os.path.exists(fpath)):
    x=pd.read_excel(fpath)
 else :
    x=pd.DataFrame()

 dfNew=pd.concat([df,x])
 dfNew.to_excel(fpath,index=False)

왜 일을 복잡하게 만드나요?Excel 파일의 행 수를 가져오기만 하면 startrow 매개 변수를 추가할 위치를 결정할 수 있습니다.

import pandas as pd
import openpyxl as xl

# Get number of rows in excel file (to determine where to append)
source_file = xl.load_workbook("file.xlsx", enumerate)
sheet = source_file["sheetname"]
row_count = sheet.max_row
source_file.close()

with pd.ExcelWriter("file.xlsx", mode='a', if_sheet_exists='overlay') as writer:  
    data.to_excel(writer, sheet_name='sheetname', index= False, startrow = row_count)

언급URL : https://stackoverflow.com/questions/47737220/append-dataframe-to-excel-with-pandas

반응형