Python/Python Pandas

Python Pandas & openpyxl : alignment (텍스트 정렬)

CosmosProject 2024. 2. 27. 21:37
728x90
반응형

 

 

 

openpyxl의 alignment를 이용하면 셀에 적힌 텍스트의 정렬을 할 수 있습니다.

 

import pandas as pd
from openpyxl.styles import Alignment


dict_test = {
    'col1': [1, 2, 3, 4, 5],
    'col2': ['apple', 'banana', 'cloud', 'dream', 'electron'],
    'col3': [1234, 0.27383720, 39372, None, 102947291.293472],
    'col4': [0.9, 0.5238, 0.13, 0.0028, 1024.29278],
}

df_test = pd.DataFrame(dict_test)

xlsx_writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')

df_test.to_excel(xlsx_writer, sheet_name='test', index=False)


worksheet = xlsx_writer.sheets['test']

cell = worksheet['B4']

cell.alignment = Alignment(
    horizontal='center',  # 가로 방향 정렬 설정
    vertical='center'  # 세로 방향 정렬 설정
)


xlsx_writer.close()

 

위 코드는 B4 cell의 객체를 가져와서 B4 cell의 정렬을 하는 코드입니다.

 

위 코드의 결과는 아래와 같습니다.

 

 

 

B4 cell에 적힌 cloud라는 텍스트가 중앙에 정렬 되어있는 것이 보이시죠.

 

horizontal='center' -> 가로 방향 정렬을 가운데로 맞춥니다.

vertical='center' -> 세로 방향 정렬을 가운데로 맞춥니다.

 

 

 

 

아래는 horizontal option, vertical option 각각에 사용할 수 있는 키워드입니다.

 

- horizontal option = {'right', 'general', 'fill', 'center', 'centerContinuous', 'distributed', 'justify', 'left'}
- vertical option = {'top', 'distributed', 'justify', 'center', 'bottom'}

 

 

 

 

 

 

 

추가로 Alignment에는 indent 옵션도 있습니다.

 

import pandas as pd
from openpyxl.styles import Alignment


dict_test = {
    'col1': [1, 2, 3, 4, 5],
    'col2': ['apple', 'banana', 'cloud', 'dream', 'electron'],
    'col3': [1234, 0.27383720, 39372, None, 102947291.293472],
    'col4': [0.9, 0.5238, 0.13, 0.0028, 1024.29278],
}

df_test = pd.DataFrame(dict_test)

xlsx_writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')

df_test.to_excel(xlsx_writer, sheet_name='test', index=False)


worksheet = xlsx_writer.sheets['test']

cell = worksheet['B4']

cell.alignment = Alignment(
    indent=10  # 10만큼 indent
)


xlsx_writer.close()

 

위 코드를 실행한 결과는 다음과 같습니다.

 

 

보면 B4 cell에 적힌 텍스트 앞에 공백이 생긴 것을 볼 수 있습니다.

B4 cell을 더블클릭해보면 이 공백이 단순히 space bar 또는 tab으로 이뤄진 것이 아니라 indent되었다는 것을 알 수 있습니다.

 

 

 

 

 

728x90
반응형