[PYTHON] pandas.ExcelWriter를 사용하여 Excel 열 너비를 자동으로 조정하는 방법이 있습니까?
PYTHONpandas.ExcelWriter를 사용하여 Excel 열 너비를 자동으로 조정하는 방법이 있습니까?
일부 Excel 보고서를 생성하도록 요청 받고 있습니다. 나는 현재 나의 데이터를 위해 팬더를 사용하고 있는데, 당연히이 보고서를 생성하기 위해 pandas.ExcelWriter 메서드를 사용하고 싶습니다. 그러나 고정 열 너비가 문제입니다.
지금까지 가지고있는 코드는 충분히 간단합니다. 'df'라는 데이터 프레임이 있다고 가정 해 보겠습니다.
writer = pd.ExcelWriter(excel_file_path)
df.to_excel(writer, sheet_name="Summary")
팬더 코드를 조사하고 있었고 실제로 열 너비를 설정하는 옵션이 없습니다. 열이 데이터에 자동 조정되도록하려면 우주에 트릭이 있습니까? 아니면 열 너비를 조정하려면 사실 xlsx 파일을 할 수있는 일이 있습니까?
(나는 OpenPyXL 라이브러리를 사용하고 .xlsx 파일을 생성한다.
고맙습니다.
해결법
-
==============================
1.user6178746의 답변에서 영감을 얻은 다음 다음과 같은 내용을 가지고 있습니다.
user6178746의 답변에서 영감을 얻은 다음 다음과 같은 내용을 가지고 있습니다.
# Given a dict of dataframes, for example: # dfs = {'gadgets': df_gadgets, 'widgets': df_widgets} writer = pd.ExcelWriter(filename, engine='xlsxwriter') for sheetname, df in dfs.items(): # loop through `dict` of dataframes df.to_excel(writer, sheet_name=sheetname) # send df to writer worksheet = writer.sheets[sheetname] # pull worksheet object for idx, col in enumerate(df): # loop through all columns series = df[col] max_len = max(( series.astype(str).map(len).max(), # len of largest item len(str(series.name)) # len of column name/header )) + 1 # adding a little extra space worksheet.set_column(idx, idx, max_len) # set column width writer.save()
-
==============================
2.아마도 지금은 자동으로 수행 할 방법이 없을 것입니다. 그러나 openpyxl을 사용할 때 다음 행 (사용자 Bufke가 수동으로 수행하는 방법에 대한 다른 답변에서 조정)을 사용하면 정당한 값 (문자 폭)을 지정할 수 있습니다.
아마도 지금은 자동으로 수행 할 방법이 없을 것입니다. 그러나 openpyxl을 사용할 때 다음 행 (사용자 Bufke가 수동으로 수행하는 방법에 대한 다른 답변에서 조정)을 사용하면 정당한 값 (문자 폭)을 지정할 수 있습니다.
writer.sheets['Summary'].column_dimensions['A'].width = 15
-
==============================
3.방금 같은 문제가 발생하여 Xlsxwriter 및 pandas의 공식 설명서에이 기능이 아직 지원되지 않는 것으로 나열되어 있기 때문에 게시하고 있습니다. 나는 내가 가지고있는 문제를 해결하는 해결책을 함께 해킹했다. 기본적으로 각 열을 반복하고 worksheet.set_column을 사용하여 열 너비 == 해당 열의 내용의 최대 길이를 설정합니다.
방금 같은 문제가 발생하여 Xlsxwriter 및 pandas의 공식 설명서에이 기능이 아직 지원되지 않는 것으로 나열되어 있기 때문에 게시하고 있습니다. 나는 내가 가지고있는 문제를 해결하는 해결책을 함께 해킹했다. 기본적으로 각 열을 반복하고 worksheet.set_column을 사용하여 열 너비 == 해당 열의 내용의 최대 길이를 설정합니다.
그러나 한 가지 중요한 메모. 이 솔루션은 열 머리글, 단순히 열 값에 맞지 않습니다. 대신 머리글을 맞추어야하는 경우 쉽게 변경해야합니다. 희망이 사람을 도와줍니다 :)
import pandas as pd import sqlalchemy as sa import urllib read_server = 'serverName' read_database = 'databaseName' read_params = urllib.quote_plus("DRIVER={SQL Server};SERVER="+read_server+";DATABASE="+read_database+";TRUSTED_CONNECTION=Yes") read_engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % read_params) #Output some SQL Server data into a dataframe my_sql_query = """ SELECT * FROM dbo.my_table """ my_dataframe = pd.read_sql_query(my_sql_query,con=read_engine) #Set destination directory to save excel. xlsFilepath = r'H:\my_project' + "\\" + 'my_file_name.xlsx' writer = pd.ExcelWriter(xlsFilepath, engine='xlsxwriter') #Write excel to file using pandas to_excel my_dataframe.to_excel(writer, startrow = 1, sheet_name='Sheet1', index=False) #Indicate workbook and worksheet for formatting workbook = writer.book worksheet = writer.sheets['Sheet1'] #Iterate through each column and set the width == the max length in that column. A padding length of 2 is also added. for i, col in enumerate(my_dataframe.columns): # find length of column i column_len = my_dataframe[col].astype(str).str.len().max() # Setting the length if the column header is larger # than the max column value length column_len = max(column_len, len(col)) + 2 # set the column length worksheet.set_column(i, i, column_len) writer.save()
-
==============================
4.최근에 StyleFrame이라는 멋진 패키지를 사용하기 시작했습니다.
최근에 StyleFrame이라는 멋진 패키지를 사용하기 시작했습니다.
그것은 DataFrame을 가져오고 아주 쉽게 스타일을 지정할 수있게 해줍니다 ...
기본적으로 열 너비는 자동 조정됩니다.
예 :
from StyleFrame import StyleFrame import pandas as pd df = pd.DataFrame({'aaaaaaaaaaa': [1, 2, 3], 'bbbbbbbbb': [1, 1, 1], 'ccccccccccc': [2, 3, 4]}) excel_writer = StyleFrame.ExcelWriter('example.xlsx') sf = StyleFrame(df) sf.to_excel(excel_writer=excel_writer, row_to_add_filters=0, columns_and_rows_to_freeze='B2') excel_writer.save()
열 너비를 변경할 수도 있습니다.
sf.set_column_width(columns=['aaaaaaaaaaa', 'bbbbbbbbb'], width=35.3)
최신 정보
버전 1.4에서는 best_fit 인수가 StyleFrame.to_excel에 추가되었습니다. 설명서를 참조하십시오.
-
==============================
5.가장 쉬운 해결책은 set_column 메서드에서 열 너비를 지정하는 것입니다.
가장 쉬운 해결책은 set_column 메서드에서 열 너비를 지정하는 것입니다.
for worksheet in writer.sheets.values(): worksheet.set_column(0,last_column_value, required_width_constant)
from https://stackoverflow.com/questions/17326973/is-there-a-way-to-auto-adjust-excel-column-widths-with-pandas-excelwriter by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 암호화 된 보안 도커 컨테이너 (0) | 2018.11.06 |
---|---|
[PYTHON] Django : FormView에 동적 (비 모델) 데이터를 미리 채우는 방법은 무엇입니까? (0) | 2018.11.06 |
[PYTHON] Python에서 안전하지 않은 사용자 입력으로부터 수학 방정식을 평가하십시오. (0) | 2018.11.06 |
[PYTHON] argparse 및 python을 사용하여 사전을 인수로 허용 [duplicate] (0) | 2018.11.06 |
[PYTHON] 현재 시간이 Python의 datetime 모듈을 사용하여 지정된 범위 내에 있는지 어떻게 알 수 있습니까? (0) | 2018.11.06 |