tabulate 모듈을 사용해서 공통으로 작성했습니다.
지원하는 tablefmt중에서 'presto' 양식으로 처리했습니다.
import re
from tabulate import tabulate
def get_string_dataframe(df, pivot_yn=True, index_drop=True):
"""DataFrame의 TEXT출력 문자를 반환한다."""
if pivot_yn:
df = df.T
if index_drop:
df = df.reset_index(drop=index_drop)
body = tabulate(df, headers='keys', tablefmt='presto', disable_numparse=True)
hindex = body.index('\n')
header = body[:hindex]
newheader = re.sub('[ ]{2,}', ' ', header)
body = header[:header.index('|') + 1] + newheader[newheader.index('|') + 1:] + '\n' + body[hindex + 1:]
return body
def test_get_string_dataframe():
data = {'18498': {'종목코드': '003960', '종목명': '사조대림', '주문번호': '18498', '주문상태': '체결', '주문수량': 37, '주문가격': 27700, '현재가': 27600, '주문구분': '매도', '미체결수량': 0, '체결량': 37, '시간': '090552', '당일매매수수료': 3580, '당일매매세금': 2357},
'18308': {'종목코드': '073560', '종목명': '우리손에프앤지', '주문번호': '18308', '주문상태': '체결', '주문수량': 480, '주문가격': 2135, '현재가': 2140, '주문구분': '매도', '미체결수량': 434, '체결량': 46, '시간': '090542', '당일매매수수료': 300, '당일매매세금': 227},
'16975': {'종목코드': '307930', '종목명': '컴퍼니케이', '주문번호': '16975', '주문상태': '접수', '주문수량': 54, '주문가격': 8920, '현재가': 8820, '주문구분': '매도', '미체결수량': 54, '체결량': 0, '시간': '090432', '당일매매수수료': 0, '당일매매세금': 0},
'16923': {'종목코드': '001120', '종목명': 'LX인터내셔널', '주문번호': '16923', '주문상태': '체결', '주문수량': 61, '주문가격': 30450, '현재가': 30400, '주문구분': '매도', '미체결수량': 0, '체결량': 61, '시간': '090428', '당일매매수수료': 6490, '당일매매세금': 4273},
'16819': {'종목코드': '084010', '종목명': '대한제강', '주문번호': '16819', '주문상태': '체결', '주문수량': 21, '주문가격': 22000, '현재가': 21650, '주문구분': '매도', '미체결수량': 0, '체결량': 21, '시간': '090423', '당일매매수수료': 1600, '당일매매세금': 1062},
'16780': {'종목코드': '010060', '종목명': 'OCI', '주문번호': '16780', '주문상태': '체결', '주문수량': 4, '주문가격': 110500, '현재가': 111000, '주문구분': '매도', '미체결수량': 0, '체결량': 4, '시간': '090421', '당일매매수수료': 1540, '당일매매세금': 1017},
'13708': {'종목코드': '017480', '종목명': '삼현철강', '주문번호': '13708', '주문상태': '체결', '주문수량': 73, '주문가격': 6690, '현재가': 6560, '주문구분': '매도', '미체결수량': 0, '체결량': 73, '시간': '090213', '당일매매수수료': 1700, '당일매매세금': 1123},
'13699': {'종목코드': '008260', '종목명': 'NI스틸', '주문번호': '13699', '주문상태': '체결', '주문수량': 96, '주문가격': 5030, '현재가': 4895, '주문구분': '매도', '미체결수량': 0, '체결량': 96, '시간': '090213', '당일매매수수료': 1690, '당일매매세금': 1110},
'13698': {'종목코드': '006800', '종목명': '미래에셋증권', '주문번호': '13698', '주문상태': '체결', '주문수량': 124, '주문가격': 8260, '현재가': 8270, '주문구분': '매도', '미체결수량': 0, '체결량': 124, '시간': '090213', '당일매매수수료': 3560, '당일매매세금': 2356},
}
df = pd.DataFrame(data)
print(get_string_dataframe(df))
if __name__ == "__main__":
test_get_string_dataframe()
# | 종목코드 | 종목명 | 주문번호 | 주문상태 | 주문수량 | 주문가격 | 현재가 | 주문구분 | 미체결수량 | 체결량 | 시간 | 당일매매수수료 | 당일매매세금
# ----+--------+---------+--------+--------+--------+--------+--------+--------+---------+-------+--------+-----------+----------
# 0 | 003960 | 사조대림 | 18498 | 체결 | 37 | 27700 | 27600 | 매도 | 0 | 37 | 090552 | 3580 | 2357
# 1 | 073560 | 우리손에프앤지 | 18308 | 체결 | 480 | 2135 | 2140 | 매도 | 434 | 46 | 090542 | 300 | 227
# 2 | 307930 | 컴퍼니케이 | 16975 | 접수 | 54 | 8920 | 8820 | 매도 | 54 | 0 | 090432 | 0 | 0
# 3 | 001120 | LX인터내셔널 | 16923 | 체결 | 61 | 30450 | 30400 | 매도 | 0 | 61 | 090428 | 6490 | 4273
# 4 | 084010 | 대한제강 | 16819 | 체결 | 21 | 22000 | 21650 | 매도 | 0 | 21 | 090423 | 1600 | 1062
# 5 | 010060 | OCI | 16780 | 체결 | 4 | 110500 | 111000 | 매도 | 0 | 4 | 090421 | 1540 | 1017
# 6 | 017480 | 삼현철강 | 13708 | 체결 | 73 | 6690 | 6560 | 매도 | 0 | 73 | 090213 | 1700 | 1123
# 7 | 008260 | NI스틸 | 13699 | 체결 | 96 | 5030 | 4895 | 매도 | 0 | 96 | 090213 | 1690 | 1110
# 8 | 006800 | 미래에셋증권 | 13698 | 체결 | 124 | 8260 | 8270 | 매도 | 0 | 124 | 090213 | 3560 | 2356
그리고, DataFrame을 바로 출력할 때는 아래 설정으로 포맷을 조정할수 있습니다.
# pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.colheader_justify', 'left')
# pd.set_option('display.precision', 10)
print(df.to_markdown(index=False))
'Programming Language > Python' 카테고리의 다른 글
dataframe 출력 사이즈 설정 (0) | 2022.05.31 |
---|---|
Python 모듈 실행시 ModuleNotFoundError 처리 (0) | 2022.03.25 |
[Python] 클래스 (0) | 2022.03.14 |
[Python] 모듈과 패키지 (0) | 2022.03.14 |
[Python] 내장함수 (0) | 2022.03.14 |