Python/Pandas

[Pandas] 리스트, 딕셔너리 자료형을 데이터프레임, Series로 바꾸기

jimmy_AI 2022. 1. 8. 17:56
반응형

파이썬 리스트, 딕셔너리에서 DataFrame, Series 변환

파이썬의 리스트, 딕셔너리 자료형에서 시리즈 혹은

데이터프레임 자료형으로 변환하는 경우들의

예시 코드와 결과에 대해 간단히 정리해보도록 하겠습니다.

 

리스트를 시리즈로 변환(list to Series)

리스트를 Series로 설정하는 과정은 pd.Series 함수에 해당 리스트를

input으로 넣어주면 간단하게 수행됩니다.

import pandas as pd

a = [10, 30, 20, 40]

pd.Series(a)

# 결과
0    10
1    30
2    20
3    40
dtype: int64

 

기본적으로 인덱스는 0, 1, 2, 3, ... 형태로 지정되나,

index 인자로 인덱스를 원하는대로 설정하는 것도 가능합니다.

a = [10, 30, 20, 40]
id = ['aaa', 'bbb', 'ccc', 'ddd']

# 인덱스를 지정하고 싶은 경우
pd.Series(a, index = pd.Index(id))

# 결과
aaa    10
bbb    30
ccc    20
ddd    40
dtype: int64

 

 

딕셔너리를 시리즈로 변환(dict to Series)

딕셔너리를 Series로 변환하는 경우에는

각 key는 인덱스, value는 값을 지정하는 형태로 변환됩니다.

b = {'aaa' : 10, 'bbb' : 20, 'ccc' : 30}

pd.Series(b)

# 결과
aaa    10
bbb    20
ccc    30
dtype: int64
반응형

리스트를 데이터프레임으로 변환(list to DataFrame)

리스트 1개를 데이터프레임으로 바꾸는 경우는 Series로 변환하는 경우와

원리가 동일하므로 생략하도록 하겠습니다.

 

리스트가 여러 개인 경우, 각 리스트를 같은 행 내에서 취급하려는 경우에는

리스트들을 하나의 리스트로 묶어서 pd.DataFrame 메소드에 input으로

넣어주시면 데이터프레임 형성이 가능하며,

 

각 리스트를 같은 열 내에서 취급하려는 경우에는

리스트들을 zip으로 묶어 input으로 넣어주시면 됩니다.

결과를 비교하면 아래 예시와 같습니다.

a = [10, 30, 20, 40]
b = ['a', 'g', 'h', 'c']

# 각 리스트를 한 행에 취급
pd.DataFrame([a, b])

# 결과
	0	  1	  2	  3
0	10	30	 20	  40
1	a  	 g	  h	   c
# 각 리스트를 한 열에 취급
pd.DataFrame(zip(a, b))

# 결과
	0	  1
0	10	  a
1	30	  g
2	20	  h
3	40	  c

만일, index 이름과 열 이름을 지정하고 싶으시다면 index와 columns 인자

아래의 경우처럼 지정해주시면 됩니다.

a = [10, 30, 20, 40]
b = ['a', 'g', 'h', 'c']

# 인덱스와 열 이름 지정
pd.DataFrame(zip(a, b), index = pd.Index(['aaa', 'bbb', 'ccc', 'ddd']), columns = ['col1', 'col2'])

# 결과
	col1  	col2
aaa	10  	a
bbb	30  	g
ccc	20  	h
ddd	40  	c

혹은, 각 리스트를 value로 가지는 딕셔너리를 생성하여

바로 아래의 dict to DataFrame 방법을 응용할 수도 있습니다.

 

 

딕셔너리를 데이터프레임으로 변환(dict to DataFrame)

딕셔너리의 각 key를 column 이름으로, value를 column의 원소들로 가지는

데이터프레임을 만들 수 있습니다.

a = {'col1' : [123, 456, 789], 'col2' : ['aaa', 'bbb', 'ccc']}

pd.DataFrame(a)

# 결과
	col1  	col2
0	123 	aaa
1	456	 bbb
2	789 	ccc

물론, 이 경우에도 인덱스를 별도로 설정하는 것이 가능합니다.(index 인자 지정)