본문 바로가기
파이썬 - 분석 라이브러리

[파이썬] 딕셔너리, 리스트를 데이터프레임 (DataFrame)으로 만들기

by myoongs 2024. 6. 8.

데이터프레임 (Dataframe)은 딕셔너리, 리스트 자료형을 pd.DataFrame() 을 사용하여 만들 수 있다.

또한, 시리즈를 데이터프레임으로 변환할 수도 있는데, 단일 시리즈를 데이터프레임으로 바꿀 경우 to_frame()을 통해 변환할 수 있고, 다수의 시리즈를 데이터프레임을 병합할 경우에는 pd.DataFrame() 혹은 pd.concat() 을 사용할 수 있다.

 

일단 오늘은 딕셔너리와 리스트를 데이터프레임으로 바꾸는 방법을 아래에 정리해보도록 하겠다.

 

1) 딕셔너리 → 데이터프레임 

기본 형식은 아래와 같다.

    데이터프레임명=pd.DataFrame(딕셔너리명)

 

데이터프레임으로 만들 딕셔너리를 준비하고, 해당 딕셔너리의 이름을 pd.DataFrame() 의 소괄호 안에 넣어주면 된다. 

아래는 코드와 아웃풋 이미지다.

import pandas as pd

dict_data={'Name':['Sarah','Jasper','Jasmine','James'], 'Age':[26,30,17,22],'MBTI':['ENTJ','INTP','ISFJ','ESFP']}
df=pd.DataFrame(dict_data)
print(df)

 

딕셔너리를 데이터프레임으로 만들 경우 시리즈 때와 동일하게 key는 열의 이름이, value는 해당 열의 개별 값으로 들어가게 된다.

별도로 index를 지정해주지 않았기 때문에 인덱스는 자동으로 0부터 채워진다.

 

인덱스 지정을 원할 경우 아래처럼 인덱스 변수를 준비해주고 (이미지의 5행) pd.DataFrame() 사용할 때 index= 을 사용하여 지정할 수 있다.

 

데이터프레임의 열 중에서 인덱스로 지정하고 싶을 경우 .set_index('열 이름') 을 사용하여 인덱스를 변경할 수 있다.

아래는 인덱스를 변경한 새로운 데이터프레임을 df1로 생성한 예시다.

# 딕셔너리 -> 데이터프레임
import pandas as pd

dict_data={'Student_ID':['s12345','s13509','s12235','s14536'],'Name':['Sarah','Jasper','Jasmine','James'],
           'Age':[26,30,17,22],'MBTI':['ENTJ','INTP','ISFJ','ESFP']}
df=pd.DataFrame(dict_data)
print("<<Original Dataframe>>\n",df)

# 기존 데이터프레임 df의 Student_ID 열을 인덱스로 지정
df1=df.set_index('Student_ID')
print("\n<<Index Changed>>\n",df1)

 

빨강 박스로 표기한 것처럼 별도 인덱스 지정 없이 데이터프레임을 생성하였을 때는 숫자로 들어가 있는데

데이터프레임 생성 후 .set_index() 메서드로 Student_ID 열을 인덱스로 지정해주자 기존 숫자 인덱스열을 사라진 게 보인다. 

 

df1의 인덱스를 .index 로 재확인했을 때도 Student_ID 열이 인덱스로 지정된 것을 알 수 있다.

 

 

2) 리스트 → 데이터프레임 

리스트는 딕셔너리와 다르게 key, value로 구분되어 있지 않다보니 데이터프레임으로 변환할 때 딕셔너리와는 다른 모습을 보인다.

딕셔너리는 열 기준으로 데이터가 들어간다면 리스트는 행을 기준으로 쌓이는 형태라고 생각 할 수 있다.

인덱스 지정 없이 사용할 경우 아래 코드처럼 데이터와 column만 넣어주면 된다.

 

아래는 행 기준 데이터와 열이름이 지정되어 작성된 코드다.

# 리스트 -> 데이터프레임
df=pd.DataFrame([['Jessica','Female',25],['Tiffany','Female',28],['Nicole','Female',30],['Ben','Male',29]],
                              columns=['Name','Gender','Age'])

print(df)

 

인덱스를 지정하여 데이터프레임을 만들 경우 아래처럼 index= 을 넣어주면 된다.

 

반응형