본문 바로가기
Python

Pandas - 자동 줄 바꿈(Warp Text) 서식 적용, 및 컬럼 크기(Auto-Column length)

by 올엠 2024. 3. 7.
반응형

보다 사용자에게 보여주기 유용한 엑셀을 작성하고자 할 때 유용한 옵션으로, 실제는 스타일 시트를 추가로 입히는 작업이라고 할 수 있다.

먼저 적용할 부분은 컬럼 크기를 글자 크기에 맞춰서 작성하는 코드이다.

>>> dict_list = [{'name':'han','age':'10','loc':'seoul','txt':'abcd','txt2':'abcd'},{'name':'kim','age':'14','loc':'busan','txt':'aasdfljleiasdfnncvlasdlhja','txt2':'abcd'},{'name':'lee','age':'12','loc':'iksan','txt':'asdfffffffffffcjkdsakfkdashjfkjlasdfjhasidasdfadsfasdfuoia','txt2':'abcd'}]

>>> df = pd.DataFrame(dict_list)

>>> with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as excelwriter:

...     df.to_excel(excelwriter, sheet_name='all', index=False)

기본적인 코드로 저장하게 되면, txt의 내용들이 잘려서 컬럼을 확장하지 않는 이상 보이지 않게 된다

이를 개선하기 위해서는 컬럼 크기값을 주어서 해소가 가능하다.

컬럼 크기  자동 설정(Auto-Column length)

여기에서는 과도한게 큰 컬럼을 방지하기 위해서 100 이상인 경우는 100으로 고정하는 코드를 추가하였다.

>>> with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as excelwriter:
...     df.to_excel(excelwriter, sheet_name='all', index=False)
...     for column in df:
...         column_length = max(df[column].astype(str).map(len).max(), len(column))
...         col_idx = df.columns.get_loc(column)
...         if column_length > 100:
...             column_length = 100
...         excelwriter.sheets['all'].set_column(col_idx, col_idx, column_length)

자동 줄 바꿈(Warp-Text)

이외에 과다한 텍스트인 경우에는 자동 줄 바꿈을 이용하면 장문의 메세지를 효과적으로 표현할 수 있는데, 

이를 코드상으로 적용해보면 다음과 같이 workbook을 생성해서 스타일로 지정이 가능하다.

테스트를 위해서 10 이상인 경우 자동 줄 바꿈을 적용하도록 했다.

>>> with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as excelwriter:
...     df.to_excel(excelwriter, sheet_name='all', index=False)
...     workbook= excelwriter.book
...     for column in df:
...         column_length = max(df[column].astype(str).map(len).max(), len(column))
...         col_idx = df.columns.get_loc(column)
...         wrap_format = workbook.add_format({'text_wrap': True})
...         if column_length > 10:
...             column_length = 10
...             excelwriter.sheets['all'].set_column(col_idx, col_idx, column_length, wrap_format)
...         else:
...             excelwriter.sheets['all'].set_column(col_idx, col_idx, column_length)
...



 

 

 

 

반응형