팬더와 함께 엑셀 **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()
출력:
업데이트: 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
@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
'programing' 카테고리의 다른 글
SQL 열 이름이 올바른지 확인합니다. (0) | 2023.10.25 |
---|---|
하나의 테이블에서 하나의 열을 통해 관계에 있는 두 개의 테이블에서 값을 가져오는 방법 (0) | 2023.10.25 |
MSSQL과 Maria 간의 인덱스 차이DB (0) | 2023.10.25 |
MySQL 테이블 열 이름을 지정하는 데 숫자를 사용할 수 있습니까? (0) | 2023.10.25 |
Angular 6+에서 로컬 컴퓨터에서 Dist 폴더를 실행하는 방법? (0) | 2023.10.25 |