2025-05-19

장상희·2025년 5월 19일

파이썬

목록 보기
24/31

dict로 변환 (to_dict)

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

orient : 출력할 dict의 형태를 지정합니다. 형태는 아래와 같습니다.

dict : {열 : {행 : 값, 행 : 값}, 열 : {행 : 값, 행 : 값}

list : {열 : [ 값 ], 열 : [ 값 ] }

series : {열 : Series, 열 : Series}

split : { index : [ 행, 행 ], columns : [ 열, 열 ], data : [ 값, 값 ] }

records : [ { 열 : 값 , 열 : 값 }, { 열 : 값, 열 : 값 } ]

index : { 행 : {열 : 값, 열 : 값}, 행 : {열 : 값, 열 : 값} }

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

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

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'))
>>
{'col1': row1    1
row2    3
Name: col1, dtype: int64, 'col2': row1    2
row2    4
Name: col2, dtype: int64}

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'인 경우 { 행 : {열 : 값, 열 : 값}, 행 : {열 : 값, 열 : 값} } 형태로 변환합니다.

Copyprint(df.to_dict(orient='index'))
>>
{'row1': {'col1': 1, 'col2': 2}, 'row2': {'col1': 3, 'col2': 4}}

Markdown으로 변환 (to_markdown)

마크다운은 노션에 쓴다

buf : 쓸 버퍼입니다. 입력하지 않으면 문자열이 반환됩니다.

mode : 파일을 열때 모드입니다. 기본값은 'wt'입니다.

index : 인덱스를 출력할지 여부입니다. 기본값은 True입니다.

storage_options : 특정 스토리지 연결에 적합한 추가 옵션을 지정합니다. (예 : 호스트, 포트, 사용자 이름, 비밀번호 등)

kwargs : 추가 적용 가능한 tabulate의 키워드입니다.

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

실제 Markdown으로 출력시 아래와 같이 출력 됩니다.

| | col1 | col2 | |:-----|-------:|-------:| | row1 | 1 | 2 | | row2 | 3 | 4 |

index인수의 사용

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

print(df.to_markdown(index=False))
>>
|   col1 |   col2 |
|-------:|-------:|
|      1 |      2 |
|      3 |      4 |
이유설명
간단한 문법복잡한 태그 없이도 서식을 표현 가능
범용성다양한 플랫폼에서 사용됨
변환 용이성HTML, PDF 등으로 손쉽게 변환
가독성원본 텍스트도 읽기 쉬움

string으로 변환(to_string)

buf : 저장할 버퍼 입니다. None이면 문자열로 출력됩니다.

columns : 출력할 열을 지정합니다.

col_space : 열 너비를 지정합니다. .

header / index : 열/행 레이블의 출력 여부 입니다. False이면 출력하지 않습니다.

리스트 형태로 입력하여 레이블명의 변경이 가능합니다.

na_rep : 결측값의 표현 방식 입니다.

formatters : 포매터 함수를 통해 값의 포맷을 설정합니다. .format() 메서드도 사용 가능합니다.

float_format : 소수점 단위 자리수를 지정합니다. 기본은 마침표( . ) 입니다.

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)
>>
index col1       col2
0        1        NaN
1        A      4.179
2      <&>  32000.000

columns 인수의 사용

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

print(df.to_string(columns=['col2'])) # col2만 출력
>>
index       col2
0            NaN
1          4.179
2      32000.000

col_space 인수의 사용

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

print(df.to_string(col_space=[10,20]))#열 너비를 지정해준다
>>
index       col1                 col2
0              1                  NaN
1              A                4.179
2            <&>            32000.000

header 인수의 사용

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

print(df.to_string(header=['val1','val2']))#col1 col2를 val1,2으로 바꿧습니다
>>
index val1       val2
0        1        NaN
1        A      4.179
2      <&>  32000.000

index인수의 사용

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

print(df.to_string(index=False))#인덱스의 출력여부
>>
col1      col2
   1       NaN
   A     4.179
 <&> 32000.000

na_rep 인수의 사용

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

print(df.to_string(na_rep='결측'))#결측치 값을 변경한다
>>
index col1       col2 # 결측치가 '결측' 으로 변경
0        1         결측
1        A      4.179
2      <&>  32000.000

index_names인수의 사용

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


`justify` 인수를 사용해 인덱스를 정렬할 수 있습니다.
사용 가능한 값 : {left / right / center / justify / justify-all / start / end / inherit / match-parent / initial / unset}
>>
index col1  col2      #인덱스가 왼쪽 정렬되어서 붙어 있는걸 알 수 있음
0        1        NaN
1        A      4.179
2      <&>  32000.000

max_raws / max_cols 인수의 사용

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

print(df.to_string(max_rows=2))#2행만 출력되면서 1행이 ...으러 함축되어 표현됨
>>
index col1     col2
0        1      NaN
..     ...      ...
2      <&>  32000.0
print(df.to_string(max_cols=1))
>>
index col1  ...
0        1  ...
1        A  ...
2      <&>  ...

show_dimensions인수의 사용

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

print(df.to_string(show_dimensions=True))
>>
index col1       col2
0        1        NaN
1        A      4.179
2      <&>  32000.000

[3 rows x 2 columns] # 데이터의 차원이 출력됨, 3행 * 2

decimal 인수의 사용

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

print(df.to_string(decimal='_'))
>>
index col1       col2
0        1        NaN
1        A      4_179
2      <&>  32000_000 # 1000단위 표현값이 .에서 _로 바

line_width인수의 사용

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

print(df.to_string(line_width=2))
>>
index col1  \ #줄바꿈이 진행되면서 \로 줄바꿈이 된걸 표현함
0        1
1        A
2      <&>

index       col2   # 줄바꿈이 진행됨.
0            NaN
1          4.179
2      32000.000

max_colwidth인수의 사용

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

print(df.to_string(max_colwidth=5))
>>
index col1  col2
0        1   NaN
1        A  4...
2      <&>  3... # 길이 5이상을 함축함

numpy로 변환 (values)

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)
>>
      col1   col2  col3   col4
row1     1    one   1.5   True
row2     2    two   2.5  False
row3     3  three   3.5  False
row4     4   four   4.5   True

여기에 values함수를 적용할 경우 아래와 같은 결과가 반환됩니다

numpy.ndarray형태로

반환되며, 레이블이 사라진것을 확인할 수 있습니다.

dict에서 변환 (from_dict)

data : dict 형태의 데이터 입니다.

orient : {index / columns / tight} 변환 방식입니다. index은 행을 키값으로 지정, columns는 열을 키값으로 지정, tight는 키값으로 [index / columns / data / index_names / columns_names] 를 가집니다.

dtype : 데이터의 type을 강제로 지정할 수 있습니다.

columns : index인수를 사용할 경우 columns인수를 통해 열 이름을 지정할 수 있습니다.

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

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

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

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

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

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

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

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)
>>
      col1  col2
row1   1.0   2.0
row2   3.0   4.0
# float type으로 변경된 것을 확인할 수 있습니다.

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)
>>
C1        col1 col2
C2        val1 val2
I1   I2
idx1 row1    1    2
     row2    3    4
profile
프로그래머 꿈나무

0개의 댓글