Python 공부 기록-25

김시헌·2025년 5월 19일

dict로 변환 (to_dict)

DataFrame.to_dict(orient='dict', into=)

to_dict 메서드는 데이터프레임 객체를 dict 형태로 변환하는 메서드 입니다.

사용법

df.to_dict(orient='dict', into=)
orient : 출력할 dict의 형태를 지정합니다. 형태는 아래와 같습니다.

dict : {열 : {행 : 값, 행 : 값}, 열 : {행 : 값, 행 : 값}
list : {열 : [ 값 ], 열 : [ 값 ] }
series : {열 : Series, 열 : Series}
split : { index : [ 행, 행 ], columns : [ 열, 열 ], data : [ 값, 값 ] }
records : [ { 열 : 값 , 열 : 값 }, { 열 : 값, 열 : 값 } ]
index : { 행 : {열 : 값, 열 : 값}, 행 : {열 : 값, 열 : 값} }

into : 반환값의 모든 매핑에 사용되는 collections.abc.Mapping 하위클래스입니다.

예시

먼저 기본적인 사용법 예시를위하여 2x2 데이터를 만들어 보겠습니다.

코드

df = pd.DataFrame([[1,2],[3,4]], columns=['col1','col2'],index=['row1','row2'])
print(df)

실행 결과

기본적인 사용법

orient 인수를 설정함으로써 출력되는 dict객체의 형태를 정할 수 있습니다.
orient = 'dict'인 경우 {열 : {행 : 값, 행 : 값}, 열 : {행 : 값, 행 : 값} 형태로 변환합니다.

코드

print(df.to_dict(orient='dict'))

실행 결과
{'col1': {'row1': 1, 'row2': 3}, 'col2': {'row1': 2, 'row2': 4}}

orient = 'list'인 경우 {열 : [ 값 ], 열 : [ 값 ] } 형태로 변환합니다.

코드

print(df.to_dict(orient='list'))

실행 결과
{'col1': [1, 3], 'col2': [2, 4]}

orient = 'series'인 경우 {열 : Series, 열 : Series} 형태로 변환합니다.

코드

print(df.to_dict(orient='series'))

실행 결과

orient = 'split'인 경우 { index : [ 행, 행 ], columns : [ 열, 열 ], data : [ 값, 값 ] } 형태로 변환합니다.

코드

print(df.to_dict(orient='split'))

실행 결과
{'index': ['row1', 'row2'], 'columns': ['col1', 'col2'], 'data': [[1, 2], [3, 4]]}

orient = 'records'인 경우 [ { 열 : 값 , 열 : 값 }, { 열 : 값, 열 : 값 } ] 형태로 변환합니다.

코드

print(df.to_dict(orient='records'))

실행 결과
[{'col1': 1, 'col2': 2}, {'col1': 3, 'col2': 4}]

orient = 'index'인 경우 { 행 : {열 : 값, 열 : 값}, 행 : {열 : 값, 열 : 값} } 형태로 변환합니다.

코드

print(df.to_dict(orient='index'))

실행 결과
{'row1': {'col1': 1, 'col2': 2}, 'row2': {'col1': 3, 'col2': 4}}

Markdown으로 변환 (to_markdown)

DataFrame.to_markdown(buf=None, mode='wt', index=True, storage_options=None, kwargs)

to_markdown은 DataFrame 객체를 마크다운 형식으로 변환해주는 메서드입니다.

사용법

df.to_markdown(buf=None, mode='wt', index=True, storage_options=None, kwargs)
buf : 쓸 버퍼입니다. 입력하지 않으면 문자열이 반환됩니다.
mode : 파일을 열때 모드입니다. 기본값은 'wt'입니다.
index : 인덱스를 출력할지 여부입니다. 기본값은 True입니다.
storage_options : 특정 스토리지 연결에 적합한 추가 옵션을 지정합니다. (예 : 호스트, 포트, 사용자 이름, 비밀번호 등)
kwargs : 추가 적용 가능한 tabulate의 키워드입니다.

예시

먼저 기본적인 사용법 예시를위하여 2x2 데이터를 만들어 보겠습니다.

코드

df = pd.DataFrame([[1,2],[3,4]], columns=['col1','col2'],index=['row1','row2'])
print(df)

실행 결과

기본적인 사용법

아무 인수 없이 df.to_markdown()을 실행하면 마크다운 형태의 값이 출력됩니다.

코드

print(df.to_markdown())

실행 결과

실제 Markdown으로 출력시 아래와 같이 출력 됩니다.
| | col1 | col2 | |:-----|-------:|-------:| | row1 | 1 | 2 | | row2 | 3 | 4 |

index인수의 사용

index=False로 입력할 경우 인덱스가 제외됩니다.

코드

print(df.to_markdown(index=False))

실행 결과

키워드로 tabulate 사용

kwargs에 tabulate의 인수들의 사용이 가능합니다.

코드

print(df.to_markdown(tablefmt='fancy_grid'))

실행 결과

pickle객체로변환 (to_pickle)

DataFrame.to_pickle(path, compression='infer', protocol=5, storage_options=None)

to_pickle메서드는 데이터객체를 Pickle 형식으로 변환해주는 메서드입니다.

사용법

df.to_pickle(path, compression='infer', protocol=5, storage_options=None)
path : pickle 오브젝트가 저장될 경로 입니다.
compression : 출력 파일에서 사용할 압축을 나타내는 문자열입니다. 기본적으로 지정된 경로의 파일 확장자에서 추론합니다.
protocol : pickler가 사용해야 하는 프로토콜을 나타내는 Int로 기본값은 HIGHEST_PROTOCOL입니다.
자세한것은 pickle 라이브러리 12.1.2를 참고 바랍니다.
storage_options : 특정 스토리지 연결에 적합한 추가 옵션을 지정합니다.(예 : 호스트, 포트, 사용자 이름, 암호 등.)

예시

먼저 기본적인 사용법 예시를위하여 2x2 데이터를 만들어 보겠습니다.

코드

df = pd.DataFrame([[1,2],[3,4]], columns=['col1','col2'],index=['row1','row2'])
print(df)

실행 결과

기본적인 사용법

path에 주소와 파일명을 지정해주면 해당 객체를 pickle 객체로 변환하여 저장할 수 있습니다.
데이터 저장

코드

address='주소지정'
df.to_pickle(address+'test1.pkl')

데이터 불러오기

코드

address='주소지정'
df2 = pd.read_pickle(address+'test1.pkl') #불러오기
print(df2)

실행 결과

html으로 변환(to_html)

DataFrame.to_html(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None, float_format=None, sparsify=None, index_names=True, justify=None, max_rows=None, max_cols=None, show_dimensions=False, decimal='.', bold_rows=True, classes=None, escape=True, notebook=False, border=None, table_id=None, render_links=False, encoding=None)

to_html메서드는 데이터프레임 객체를 html 문법으로 변환하는 메서드 입니다.

사용법

df.(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None, float_format=None, sparsify=None, index_names=True, justify=None, max_rows=None, max_cols=None, show_dimensions=False, decimal='.', bold_rows=True, classes=None, escape=True, notebook=False, border=None, table_id=None, render_links=False, encoding=None)
buf : 저장할 버퍼 입니다. None이면 문자열로 출력됩니다.
columns : 출력할 열을 지정합니다.
col_space : 열 너비를 지정합니다. 픽셀 단위 입니다.
header / index : 열/행 레이블의 출력 여부 입니다. False이면 출력하지 않습니다.
na_rep : 결측값의 표현 방식 입니다.
formatters : 포매터 함수를 통해 값의 포맷을 설정합니다. .format() 메서드도 사용 가능합니다.
float_format : 소수점 단위 자리수를 지정합니다. 기본은 마침표( . ) 입니다. sparsify : 각 행의 모든 다중 인덱스 키를 인쇄하려면 계층적 인덱스가 있는 DataFrame에 대해 False로 설정합니다.
index_names : 인덱스명을 출력할지를 정합니다.
justify : 정렬 방식을 지정합니다.
maxrows : 최대 출력할 줄 수를 지정합니다. 초과되는 줄은 ( ... )형태로 축약됩니다.
maxcols : 최대 출력할 열 수를 지정합니다. 초과되는 줄은 ( ... )형태로 축약됩니다.
minrow : maxrows로인해 잘린 표현을 표시할 수 입니다.
show_dimensions : 출력된 html 객체 아래에 데이터 객체의 차원을 출력합니다.
decimal : 1000단위 구분기호로 인식되는 문자를 지정합니다.
bold_rows : 출력에서 행 레이블을 굵게할지 여부입니다. 기본은 True입니다.
classes 결과 html의 table에 적용할 css 클래스를 지정합니다.
escape : 문자 <, > 및 &를 HTML 안전 시퀀스로 변환합니다. 즉 문자를 HTML 문법이 아닌 문자 그대로 출력합니다.
notebook : 생성된 HTML이 IPython Notebook용인지 여부입니다. 기본은 False입니다.
border : 테두리의 두께를 지정합니다.
encoding : 인코딩을 지정합니다.
table_id : css의 table id를 설정합니다.
render_links : url을 html 링크로 변환합니다.

예시

먼저 기본적인 사용법 예시를위하여 3x2 짜리 데이터를 만들어 보겠습니다.

코드

data = [[1,np.nan],['A',4.179],['<&>',32000]]
df = pd.DataFrame(data,columns=['col1','col2'])
df=df.rename_axis(columns='index')
print(df)

실행 결과

기본적인 사용법

기본적으로 아무 입력값 없이 실행 할 경우 str 형식으로 반환됩니다.

코드

print(df.to_html())

실행 결과

columns인수의 사용

columns인수는 출력할 열을 지정합니다. 리스트 형태로 입력이 가능합니다.

코드

print(df.to_html(columns=['col1']))

col1열만 출력되는 것을 확인할 수 있습니다.

실행 결과

col_space인수의 사용

col_space인수는 열의 수와 같은 크기의 리스트를 이용해 각 열의 크기를 지정할 수 있습니다.

코드

print(df.to_html(col_space=[100,200]))

열의 크기가 100픽셀 x 200픽셀로 변경된 것을 알 수 있습니다.

실행 결과

header / index 인수의 사용

header / index 인수는 각각 열/행 레이블의 출력 여부를 지정하는 인수 입니다. 기본값은 True입니다.

코드

print(df.to_html(header=False, index=False))

둘다 False로 입력하자 인덱스가 출력되지 않은것을 확인할 수 있습니다.

실행 결과

na_rep 인수의 사용

na_rep인수는 결측값을 어떤 문자로 출력할지 지정하는 메서드 입니다.

코드

print(df.to_html(na_rep="결측값"))

NaN이 결측값으로 출력된 것을 확인할 수 있습니다.

실행 결과

formatters 인수의 사용

formatter 인수에 함수를 이용하여 값의 포맷을 변경할 수 있습니다.
예시를 위해 datetime을 포함하는 데이터프레임 객체를 생성하겠습니다.

코드

time = pd.to_datetime(['16:04:33.500','17:30:00.000'],format='%H:%M:%S.%f')
x = pd.DataFrame({'col':time})
print(x)

실행 결과

이제 형식을 변환하는 함수를 작성하여 formatter함수에 적용해보겠습니다.

코드

def format_func(x):
    return x.strftime('%H:%M')
result = x.to_html(formatters={'col':format_func})
print(result)

시:분:초:각초 형식의 데이터를 시:분 형태로 html 변환이 실행된 것을 확인할 수 있습니다.

실행 결과

float_format인수의 사용

float_format인수를 이용해 소수점 표현방식을 포매터 함수를 이용해서 지정할 수 있습니다.

코드

print(df.to_html(float_format='{0:.2g}'.format))

4.197이 표현식에따라 4.2로, 32000이 표현식에 따라 3.2e+04로 출력된 것을 확인할 수 있습니다.

실행 결과

index_names 인수의 사용

index_names 인수를 이용해 인덱스명의 출력 여부를 지정할 수 있습니다. 기본값은 True 입니다.

코드

print(df.to_html(index_names=False))

인덱스명으로 입력되었던 Index가 출력되지 않은 것을 확인할 수 있습니다.

실행 결과

justify 인수의 사용

justify 인수를 통해 정렬 방식을 지정할 수 있습니다.
{left / right / center / justify / justify-all / start / end / inherit / match-parent / initial / unset}

코드

print('====='+'left'+'='*20) # 구분을 위해 입력한 값입니다.
print(df.to_html(col_space=[100,100], justify='left'))
print('====='+'right'+'='*20)
print(df.to_html(col_space=[100,100], justify='right'))
print('====='+'center'+'='*20)
print(df.to_html(col_space=[100,100], justify='center'))

인덱스의 정렬방식이 각각 왼쪽정렬, 오른쪽 정렬, 가운데 정렬이 된것을 확인할 수 있습니다.

실행 결과

maxrow 인수의 사용

maxrow인수는 최대 출력줄 수를 지정하는 인수입니다. 초과되는 수의 열은 (...) 형태로 축약됩니다.

코드

print(df.to_html(max_rows=2))

실행 결과

maxcols 인수의 사용

maxcol인수는 최대 출력열 수를 지정하는 인수입니다. 초과되는 수의 열은 (...) 형태로 축약됩니다.

코드

print(df.to_html(max_cols=1))

실행 결과

show_dimensions 인수의 사용

show_dimensions 인수를 통해 데이터 객체의 차원을 추가로 출력할 수 있습니다.

코드

print(df.to_html(show_dimensions=True))

실행 결과

decimal 인수의 사용

decimal 인수를 이용하여 10,000 같이 1000단위수의 구분기호로 사용되는 콤마( , )를 다른 문자로 변경 할 수 있습니다.

코드

print(df.to_html(decimal='_'))

1000단위 구분기호인 콤마( , )가 언더바( _ )로 변경된 것을 확인할 수 있습니다.

실행 결과

bold_rows인수의 사용

bold_rows인수를 이용해서 출력의 행 레이블을 굵게 설정할지 여부를 지정할 수 있습니다. 기본값은 True입니다.

코드

print(df.to_html(bold_rows=False))

행 레이블이 기본값인 굵게 에서 보통으로 바뀐것을 확인할 수 있습니다.

실행 결과

classes 인수의 사용

classes인수를 이용해서 html의 table에 적용할 css 클래스를 지정할 수 있습니다.

코드

print(df.to_html(classes='test'))

실행 결과

escape 인수의 사용

escape인수를 이용하여문자 <, > 및 &를 HTML 안전 시퀀스로 변환합니다.
즉, 문자를 HTML 문법이 아닌 문자 그대로 출력합니다. 기본값은 True 입니다.

코드

print(df.to_html(escape=False))

기존 데이터의 <&>가 html 문법으로 출력되어 오류가 발생한 것을 확인 할 수 있습니다.

실행 결과

border 인수의 사용

border인수는 테두리의 두께를 지정하는 인수입니다.

코드

print(df.to_html(border=2))

두께가 두껍게 출력된 것을 확인할 수 있습니다.

실행 결과

table_id 인수의 사용

table_id인수를 이용해 css로 table의 id를 설정할 수 있습니다.

코드

print(df.to_html(table_id='test'))

실행 결과

string으로 변환(to_string)

DataFrame.to_string(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None, float_format=None, sparsify=None, index_names=True, justify=None, max_rows=None, max_cols=None, show_dimensions=False, decimal='.', line_width=None, min_rows=None, max_colwidth=None, encoding=None)

to_string 메서드는 데이터 객체를 단순 string 형태로 변형하는 메서드입니다.

사용법

df.to_string(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None, float_format=None, sparsify=None, index_names=True, justify=None, max_rows=None, max_cols=None, show_dimensions=False, decimal='.', line_width=None, min_rows=None, max_colwidth=None, encoding=None)
buf : 저장할 버퍼 입니다. None이면 문자열로 출력됩니다.
columns : 출력할 열을 지정합니다.
col_space : 열 너비를 지정합니다. .
header / index : 열/행 레이블의 출력 여부 입니다. False이면 출력하지 않습니다.
리스트 형태로 입력하여 레이블명의 변경이 가능합니다.
na_rep : 결측값의 표현 방식 입니다.
formatters : 포매터 함수를 통해 값의 포맷을 설정합니다. .format() 메서드도 사용 가능합니다.
float_format : 소수점 단위 자리수를 지정합니다. 기본은 마침표( . ) 입니다.
※ formatters / float_format 의 사용법은 19-07 html형태 변환to_html 에 자세히 설명 되어있으므로 참고 바랍니다.
sparsify : 각 행의 모든 다중 인덱스 키를 인쇄하려면 계층적 인덱스가 있는 DataFrame에 대해 False로 설정합니다.
index_names : 인덱스명을 출력할지를 정합니다.
justify : 정렬 방식을 지정합니다.
maxrows : 최대 출력할 줄 수를 지정합니다. 초과되는 줄은 ( ... )형태로 축약됩니다.
maxcols : 최대 출력할 열 수를 지정합니다. 초과되는 줄은 ( ... )형태로 축약됩니다.
show_dimensions : 출력된 html 객체 아래에 데이터 객체의 차원을 출력합니다.
decimal : 1000단위 구분기호로 인식되는 문자를 지정합니다.
linewidth : 문자로 줄바꿈할 너비 입니다.
minrow : maxrows로인해 잘린 표현을 표시할 수 입니다.
max_colwidth : 각 열을 문자열로 자르기 위한 최대 너비입니다. 기본값은 무제한 입니다.
encoding : 인코딩을 지정합니다.

예시

먼저 기본적인 사용법 예시를위하여 3x2 데이터를 만들어 보겠습니다.

코드

data = [[1,np.nan],['A',4.179],['<&>',32000]]
df = pd.DataFrame(data,columns=['col1','col2'])
df=df.rename_axis(columns='index')
print(df)

실행 결과

기본적인 사용법

to_string( )메서드를 사용하면 데이터 객체의 기본 타입인 pandas.core.frame.DataFrame을 string으로 변경합니다.

코드

print(df.to_string())

실행 결과

코드

print(type(df))

실행 결과
print(type(df))

코드

print(type(df.to_string()))

실행 결과
<class 'str'>

columns 인수의 사용

columns 인수를 입력하여 특정 열만 출력이 가능합니다. list 형태로 입력하여야합니다

코드

print(df.to_string(columns=['col2'])) # col2만 출력

실행 결과

col_space 인수의 사용

col_space 인수를 입력하여 열 너비를 지정할 수 있습니다.

코드

print(df.to_string(col_space=[10,20]))

실행 결과

header 인수의 사용

header 인수를 입력하여 열 이름을 지정할 수 있습니다. True 나 False, None를 입력하여 출력 여부를 설정할 수도 있습니다.

코드

print(df.to_string(header=['val1','val2']))

실행 결과

index인수의 사용

index 인수를 이용해 index의 출력 여부를 정할 수 있습니다.

코드

print(df.to_string(index=False))

실행 결과

na_rep 인수의 사용

na_rep인수를 입력하여 결측치(NaN등)의 표현값을 변경할 수 있습니다.

코드

print(df.to_string(na_rep='결측'))

실행 결과

index_names인수의 사용

index_names를 설정함으로서 인덱스명의 출력 여부를 정할 수 있습니다. 기본값은 True입니다.

col1 col2 # 인덱스명이 출력되지 않음 0 1 NaN 1 A 4.179 2 <&> 32000.000

코드

<br>
**justify 인수의 사용**<bR>
`justify` 인수를 사용해 인덱스를 정렬할 수 있습니다.<br>
사용 가능한 값 : {left / right / center / justify / justify-all / start / end / inherit / match-parent / initial / unset}<br>

print(df.to_string(justify='left'))

실행 결과

max_raws / max_cols 인수의 사용

max_raws / max_cols 인수를 사용해 출력할 최대 행/열 수를 지정할 수 있습니다. 초과분은 ( ... )로 함축되어 표현됩니다.

코드

print(df.to_string(max_rows=2))

실행 결과

코드

print(df.to_string(max_cols=1))

실행 결과

show_dimensions인수의 사용

show_dimensions인수를 이용하여 데이터의 차원을 출력할 수 있습니다.

코드

print(df.to_string(show_dimensions=True))

실행 결과

decimal 인수의 사용

decimal인수를 사용하여 1000단위 표현값을 지정할 수 있습니다. 기본값은 콤마( , ) 입니다.

코드

print(df.to_string(decimal='_'))

실행 결과

line_width인수의 사용

linde_width인수값을 입력하여 줄바꿈할 열의 너비를 지정할 수 있습니다.

코드

print(df.to_string(line_width=2))

실행 결과

max_colwidth인수의 사용

max_colwidth 인수를 이용하여 열 내의 문자열 길이를 제한할 수 있습니다. 초과하는 문자는 ( ... ) 으로 함축됩니다.

코드

print(df.to_string(max_colwidth=5))

실행 결과

numpy로 변환 (values)

DataFrame.values
DataFrame.to_numpy를 사용하는것을 추천합니다.

DataFrame 요소를 Numpy 형태(numpy.ndarray)로 반환합니다. 레이블은 삭제됩니다.

사용법

df.values

예시

먼저, 아래와 같이 기본적인 4x4 행렬을 만듭니다. col1은 숫자, col2는 문자, col3은 float, col4는 bool의 dtype을 가집니다.

코드

col1 = [1, 2, 3, 4]
col2 = ['one', 'two', 'three', 'four']
col3 = [1.5, 2.5, 3.5, 4.5]
col4 = [True, False, False, True]
index = ['row1','row2','row3','row4']
df = pd.DataFrame(index=index, data={"col1": col1, "col2": col2, "col3": col3, "col4": col4})
print(df)

실행 결과

여기에 values함수를 적용할 경우 아래와 같은 결과가 반환됩니다. 결과값은 numpy.ndarray형태로
반환되며, 레이블이 사라진것을 확인할 수 있습니다.

코드

result = df.values
print(result)

실행 결과

dict에서 변환 (from_dict)

DataFrame.DataFrame.from_dict(data, orient='columns', dtype=None, columns=None)

from_dict메서드는 dict객체로부터 DataFrame 객체로 변환하는 메서드입니다.

사용법

df.from_dict(data, orient='columns', dtype=None, columns=None)
data : dict 형태의 데이터 입니다.
orient : {index / columns / tight} 변환 방식입니다. index은 행을 키값으로 지정, columns는 열을 키값으로 지정, tight는 키값으로 [index / columns / data / index_names / columns_names] 를 가집니다.
dtype : 데이터의 type을 강제로 지정할 수 있습니다.
columns : index인수를 사용할 경우 columns인수를 통해 열 이름을 지정할 수 있습니다.

예시

기본적인 사용법
orient인수의 기본값은 'columns'로 키값으로 열 이름을 사용하게 됩니다.

코드

data = {'col1':[1,3],'col2':[2,4]}
df = pd.DataFrame.from_dict(data=data, orient='columns')
print(df)

실행 결과

orient인수가 'index'인 경우 키 값으로 행 이름을 사용하게 됩니다.

코드

data = {'row1':[1,2],'row2':[3,4]}
df = pd.DataFrame.from_dict(data=data, orient='index')
print(df)

실행 결과

orient인수가 'index'인 경우 columns인수를 통해 열 이름을 추가로 설정할 수 있습니다.

코드

data = {'row1':[1,2],'row2':[3,4]}
df = pd.DataFrame.from_dict(data=data, orient='index', columns=['col1','col2'])
print(df)

실행 결과

dtype 인수를 이용하면 값의 type을 강제로 지정할 수 있습니다.

코드

data = {'row1':[1,2],'row2':[3,4]}
df = pd.DataFrame.from_dict(data=data, orient='index', columns=['col1','col2'],dtype='float')
print(df)

실행 결과

orient='tight'인 경우 'index' / 'columns' / 'data' / 'index_names' / 'column_names'를 키 값으로 지정하여 세부내용을 설정 할 수 있습니다.
※1.4.0 버전부터만 사용 가능합니다.

코드

data =  {'index'        : [('idx1','row1'),('idx1','row2')], # 인덱스 이름 설정, 멀티 인덱스 가능
         'columns'      : [('col1','val1'),('col2','val2')], # 열 이름 설정, 멀티 컬럼 가능
         'data'         : [[1,2],[3,4]], # 데이터 값 설정
         'index_names'  : ['I1','I2'], # 인덱스명 설정
         'column_names' : ['C1','C2']} # 컬럼명 설정
df = pd.DataFrame.from_dict(data=data, orient='tight')
print(df)

실행 결과

0개의 댓글