programing

팬더와 함께 엑셀 **Table** 만드는 법to_excel()?

powerit 2023. 10. 25. 23:49
반응형

팬더와 함께 엑셀 **Table** 만드는 법to_excel()?

데이터 프레임에서 프로그래밍 방식으로 이를 달성해야 합니다.

https://learn.microsoft.com/en-us/power-bi/service-admin-troubleshoot-excel-workbook-data

다음은 XlsxWriter를 사용하는 한 가지 방법입니다.


import pandas as pd

# Create a Pandas dataframe from some data.
data = [10, 20, 30, 40, 50, 60, 70, 80]
df = pd.DataFrame({'Rank': data,
                   'Country': data,
                   'Population': data,
                   'Data1': data,
                   'Data2': data})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter("pandas_table.xlsx", engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object. Turn off the default
# header and index and skip one row to allow us to insert a user defined
# header.
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False, index=False)

# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# Get the dimensions of the dataframe.
(max_row, max_col) = df.shape

# Create a list of column headers, to use in add_table().
column_settings = []
for header in df.columns:
    column_settings.append({'header': header})

# Add the table.
worksheet.add_table(0, 0, max_row, max_col - 1, {'columns': column_settings})

# Make the columns wider for clarity.
worksheet.set_column(0, max_col - 1, 12)

# Close the Pandas Excel writer and output the Excel file.
writer.save()

출력:

enter image description here

업데이트: XlsxWriter 문서에 유사한 예제를 추가했습니다. 예제: 워크시트 표를 포함한 Pandas Excel 출력

당신은 할 수 없습니다.to_excel. 해결 방법은 생성된 xlsx 파일을 열고 openpyxl로 테이블을 추가하는 것입니다.

import pandas as pd

df = pd.DataFrame({'Col1': [1,2,3], 'Col2': list('abc')})

filename = 'so58326392.xlsx'
sheetname = 'mySheet'
with pd.ExcelWriter(filename) as writer:
    if not df.index.name:
        df.index.name = 'Index'
    df.to_excel(writer, sheet_name=sheetname)
    
import openpyxl
wb = openpyxl.load_workbook(filename = filename)
tab = openpyxl.worksheet.table.Table(displayName="df", ref=f'A1:{openpyxl.utils.get_column_letter(df.shape[1])}{len(df)+1}')
wb[sheetname].add_table(tab)
wb.save(filename)

모든 테이블 머리글은 문자열이어야 합니다.이름 없는 인덱스(규칙)가 있는 경우 첫 번째 셀(A1)이 비어 있으면 파일이 손상됩니다.이를 방지하려면 인덱스 이름을 지정하거나(위에 표시된 것처럼) 다음을 사용하여 인덱스 없이 데이터 프레임을 내보냅니다.

df.to_excel(writer, sheet_name=sheetname, index=False)

저장했다가 다시 열고 다시 저장하지 않으려면 xlsxwriter를 사용하는 것도 방법입니다.ListObject 테이블을 직접 쓸 수는 있지만 데이터 프레임에서 직접 쓸 수는 없기 때문에 부분을 잘라내야 합니다.

import pandas as pd
import xlsxwriter as xl

df = pd.DataFrame({'Col1': [1,2,3], 'Col2': list('abc')})

filename = 'output.xlsx'
sheetname = 'Table'
tablename = 'TEST'

(rows, cols) = df.shape
data = df.to_dict('split')['data']
headers = []
for col in df.columns:
    headers.append({'header':col})

wb = xl.Workbook(filename)
ws = wb.add_worksheet()

ws.add_table(0, 0, rows, cols-1,
    {'name': tablename
    ,'data': data
    ,'columns': headers})

wb.close()

add_table()함수 기대'data'목록 목록으로서, 여기서 각 서브 목록은 데이터 프레임의 행을 나타냅니다.'columns'각 열이 양식의 사전에 의해 지정되는 헤더에 대한 딕션 목록으로서{'header': 'ColumnName'}.

panda-xlsx-tables의 올바른 형식의 엑셀 테이블을 작성하기 위해 패키지를 만들었습니다.

from pandas_xlsx_tables import df_to_xlsx_table
import pandas as pd

data = [10, 20, 30, 40, 50, 60, 70, 80]
df = pd.DataFrame({'Rank': data,
                'Country': data,
                'Population': data,
                'Strings': [f"n{n}" for n in data],
                'Datetimes': [pd.Timestamp.now() for _ in range(len(data))]})

df_to_xlsx_table(df, "my_table", index=False, header_orientation="diagonal")

그 반대의 경우에도 사용할 수 있습니다.xlsx_table_to_df

Excel screenshot

@jmcnamara의 답변을 기반으로 하지만 편리한 기능으로 "with" 문을 사용합니다.

import pandas as pd

def to_excel(df:pd.DataFrame, excel_name: str, sheet_name: str, startrow=1, startcol=0):
    """ Exports pandas dataframe as a formated excel table """
    with pd.ExcelWriter(excel_name, engine='xlsxwriter') as writer:
        df.to_excel(writer, sheet_name=sheet_name, startrow=startrow, startcol=startcol, header=True, index=False)
        workbook = writer.book
        worksheet = writer.sheets[sheet_name]
        max_row, max_col = df.shape

        olumn_settings = [{'header': header} for header in df.columns]
        worksheet.add_table(startrow, startcol, max_row+startrow, max_col+startcol-1, {'columns': column_settings})
        # style columns
        worksheet.set_column(startcol, max_col + startcol, 21)

언급URL : https://stackoverflow.com/questions/58326392/how-to-create-excel-table-with-pandas-to-excel

반응형