개발고생일지/파이썬

pandas Dataframe(데이터프레임) 만드는 방법 총정리

Fartist 2023. 3. 24. 23:59
- 목차
들어가는 말
1. 빈 데이터프레임 만드는 방법
2. 열(columns)과 데이터 값(values)을 지정하여 데이터프레임을 만드는 방법
3. 열, 데이터 값뿐만 아니라 index(행)도 지정하여 데이터프레임 만드는 방법
4. 데이터 타입(type)을 지정하여 데이터프레임 만드는 방법
4. 변수를 Key의 값으로 받아 데이터프레임 만들기
갈무리

 

[그림 1] 데이터프레임 만들기 총정리
[그림 1] 데이터프레임 만들기 총정리


들어가는 말

 이번 글에서는 데이터프레임을 만드는 방법을 최대한 많이 다뤄보고자 합니다. 여러 방식이 있으니 앞으로 코드 리딩을 하거나, 직접 코드를 작성할 때 참고하시기 바랍니다. '1. 빈 데이터프레임 만드는 방법'은 이전에 한 번 다룬 적이 있으므로 해당 부분은 이전 글 링크로 대신합니다. 


1.  빈 데이터프레임 만드는 방법

2023.03.24 - [개발고생일지/파이썬] - pandas Empty Dataframe(빈 데이터 프레임) 만드는 방법

 

pandas Empty Dataframe(빈 데이터 프레임) 만드는 방법

- 목차 들어가는 말 1. 빈 데이터 프레임 만들기 2. 열(columns)을 지정하여 빈 데이터 프레임 만들기 3. 행(index)을 지정하여 빈 데이터 프레임 만들기 4. 열(columns)과 행(index)을 지정한 빈 데이터 프레

applecoconut.tistory.com


2.  열(columns)과 데이터 값(values)을 지정하여 데이터프레임을 만드는 방법

 1) 하나의 열과 데이터 값들(values)을 가진 데이터프레임 만들기

import pandas as pd

df_02 = pd.DataFrame({'ID': ['apple', 'banana', 'coconut']})

df_02.info
#<bound method DataFrame.info of         ID
#0    apple
#1   banana
#2  coconut>

[코드 1] 하나의 열과 데이터 값들을 가지는 데이터프레임

 [코드 1]의 코드를 쪼개서 살펴봅시다. 먼저 pandas 라이브러리를 'pd'로 약어 설정을 하여 호출합니다. 변수 'df_02'를 데이터프레임으로 선언합니다. 앞서 빈 데이터프레임을 만들면서 '.DataFrame()' 메서드에 대해서는 익숙할 것입니다. 빈 데이터프레임을 만들었던 이 메서드에서 소괄호() 안에 자신이 원하는 값들을 지정하여 데이터프레임을 커스텀할 수 있습니다.

 소괄호 안을 보시면 중괄호{}로 묶여있는 데이터 값을 확인할 수 있습니다. 이는 딕셔너리 타입의 형식과 같습니다. 

[그림 2] 딕셔너리 형태를 띄고 있는 모습
[그림 2] 딕셔너리 형태를 띄고 있는 모습

 .DataFrame()은 dict 형식의 데이터를 받아 데이터프레임에 반영하는 메서드입니다. 이번에는 딕셔너리를 살펴봅시다.

{ 'ID': ['apple', 'banana', 'coconut'] }

[코드 2] dict 형식을 따르는. DataFrame() 메서드 안 코드

 [코드 2]를 살펴보면 key로 'ID'를 가지고, values로 리스트 형식의 ['apple', 'banana', 'coconut']를 가지는 딕셔너리(dict)입니다. 여기서 key는 columns(열의 제목)으로 사용됩니다. 그리고 key의 값으로 3가지 값을 리스트로 넣었기 때문에 3가지 행(index)을 가지게 됩니다. 이렇게 만든 데이터프레임을 출력해 보면 다음과 같습니다.

 

[그림 2] 코드 1의 데이터프레임 출력
[그림 3] 코드 1의 데이터프레임 출력

 열의 제목(columns)으로 'ID'를 가지며, 0행부터 2행으로 총 3행(index)을 가지는 데이터프레임이 출력되었습니다.


 2) 여러 열과 데이터 값들을 가진 데이터프레임 만들기

 그렇다면 하나의 열이 아닌 두 개 이상의 열을 가진 데이터 프레임은 어떻게 만들까요? 단순히 딕셔너리의 두 번째 key를 설정해 주면 됩니다.

df_03 = pd.DataFrame({'ID': ['apple', 'banana', 'coconut'], '이름': ['홍길동', '김철수', '이미숙']})

df_03.info
#<bound method DataFrame.info of         ID   이름
#0    apple  홍길동
#1   banana  김철수
#2  coconut  이미숙>

[코드 3] 두 개 이상의 열을 가진 데이터프레임 만들기

 [코드 3]을 보면 Key가 'ID'와 '이름'으로 2개인 것을 확인할 수 있습니다. 이것을 표로 출력해 보면 다음과 같습니다. 

[그림 4] 두 개 이상의 열을 가진 데이터프레임
[그림 4] 두 개 이상의 열을 가진 데이터프레임


3) 딕셔너리를 사용하지 않고, 열과 데이터 값을 지정하는 또 다른 방법(행 기준)

 우리는 앞서 딕셔너리의 형태로 열과 데이터 값을 지정하여 데이터프레임을 생성하였습니다. 이번에는 딕셔너리를 사용하지 않고 데이터프레임을 생성하는 방법에 대해서 살펴보겠습니다.

df_04 = pd.DataFrame([['A+','B-','D'], ['B','A-','C']]
                    , columns = ['A과목', 'B과목', 'C과목'])

df_04
#<bound method DataFrame.info of   A과목 B과목 C과목
#0  A+  B-   D
#1   B  A-   C>

[코드 4] 딕셔너리를 사용하지 않고 데이터프레임을 생성하는 방법 

 [코드 4]를 보면 []리스트 안에 또 다른 [] 리스트의 형태로 각 행이 선언되어 있습니다. 그리고 columns 인자를 넣어 열 제목을 지정해주고 있습니다. [코드 3]과 비교해 보면 [코드 3]은 세로축, 열을 기준으로 데이터를 입력하고 있고, [코드 4]는 가로축, 행을 기준으로 데이터를 입력하고 있습니다. 자신이 필요한 형식에 따라 이 두 가지에서 적당한 데이터프레임 선언 방식을 골라 사용하시기 바랍니다.

[그림 5] 딕셔너리를 사용하지 않고 생성한 데이터프레임
[그림 5] 딕셔너리를 사용하지 않고 생성한 데이터프레임

 

 4) 주의사항

 이런 질문이 생길 수 있습니다.

만약 첫 번째 Key의 값은 3개이고 두 번째 Key의 값은 2개인 데이터프레임은 어떻게 만들지?

df_05 = pd.DataFrame({'ID': ['apple', 'banana', 'coconut'], '이름': ['홍길동', '김철수']})

df_05.info
#ValueError: All arrays must be of the same length

[코드 5] key값의 개수가 서로 다른 경우 데이터프레임 만들기

 [코드 5]는 두 번째 키(Key)의 값의 개수가 하나가 모자란 상태로 .DataFrame() 메서드에 입력되었습니다. 그 결과 데이터프레임이 생성되지 않고 '배열의 길이가 반드시 같아야 합니다.'라는 경고 메시지를 출력하고 있습니다. 그렇다면 하나의 값이 비어있는 데이터프레임은 만들 수 없는 걸까요? 다음의 코드를 살펴봅시다.

df_05 = pd.DataFrame({'ID': ['apple', 'banana', 'coconut'], '이름': ['홍길동', '김철수','']})

df_05.info
#<bound method DataFrame.info of         ID   이름
#0    apple  홍길동
#1   banana  김철수
#2  coconut     >

[코드 6] 데이터프레임에서 비어있기를 원하는 값의 처리

  이번에는 비어있기를 원하는 데이터값의 위치에 ''으로 빈 문자열을 넣어주었습니다. 데이터프레임 'df_05'은 정상적으로 생성되었습니다.

[그림 6] 빈 데이터값을 가지는 데이터프레임 생성
[그림 6] 빈 데이터값을 가지는 데이터프레임 생성

 이로써 데이터 프레임을 딕셔너리 형태로 선언할 때는 반드시 각 Key가 가지는 Values의 개수는 동일해야 한다는 조건을 배웠습니다. 앞으로 데이터프레임을 생성할 때는 이 부분을 반드시 지켜야 합니다.


3.  열, 데이터 값뿐만 아니라 index(행)도 지정하여 데이터프레임 만드는 방법

 

df_06 = pd.DataFrame({'ID': ['apple', 'banana', 'coconut'] 
                      ,'이름': ['홍길동', '김철수', '이미숙']}
                     ,index = ['a','b','c'])

df_06.info
#<bound method DataFrame.info of         ID   이름
#a    apple  홍길동
#b   banana  김철수
#c  coconut  이미숙>

[코드 7] index(행)를 지정하여 데이터프레임 생성하기

 [코드 7]을 보면. DataFrame() 안에 'index = []'가 선언되어 있습니다. index = []는 리스트 타입을 받아 index를 지정해 주는 인자입니다. 'df_05.info'로 데이터프레임의 정보를 보면 index부분이 [코드 6]에서는 '0, 1, 2'였지만, [코드 7]에서는 'a, b, c'가 되었음을 확인할 수 있습니다.

[그림 7] index를 지정하여 데이터프레임 생성하기
[그림 7] index를 지정하여 데이터프레임 생성하기

 [그림 7]을 보면 index 부분이 'a, b, c'로 변경된 것을 확인할 수 있습니다. index 도 4)주의사항에서 살펴본 것처럼 리스트 안에 있는 값의 개수가 같아야 합니다. 여분의  index를 추가로 지정하거나 모자라게 지정할 수 없습니다.


4. 자료형(dtype)을 지정하여 데이터프레임 만드는 방법

df_07 = pd.DataFrame([[1, 2, 3], [4, 5, 6]] 
                        ,columns = ['A과목', 'B과목', 'C과목'] 
                        ,dtype = int)
df_07

[코드 8] 데이터 타입(dtype)을 지정하여 데이터프레임 만드는 방법

 .DataFrame() 메서드 안에 'dtype = '자료형 이름'을 입력하여 데이터 값(values)의 자료형을 지정해 줄 수 있습니다. [코드 8]은 가로축을 기준으로 데이터프레임을 선언했지만 딕셔너리를 사용해서 세로축을 기준으로 데이터를 입력해도 자료형 지정 방식은 똑같습니다. 'dtype = 자료형 이름'을 입력하면 자료형을 지정하게 됩니다.


5. 변수를 Key의 값으로 받아 데이터프레임 만들기

 실제로 데이터프레임을 만들 때는 일일이 소괄호() 안에 값을 직접 입력하지 않습니다. 다음의 코드는 방금까지 알아본 데이터프레임을 만드는 방법을 좀 더 현실성 있게 생성해 본 예시입니다.

dates = ['2023-03-01', '2023-03-02', '2023-03-03']
subject = ['수학', '영어', '국어']
grades = ['A', 'B+', 'A-']

df_08 = pd.DataFrame({'Date':dates, 'subject': subject, 'grades': grades})

df_08.info
#<bound method DataFrame.info of          Date subject grades
#0  2023-03-01      수학      A
#1  2023-03-02      영어     B+
#2  2023-03-03      국어     A->

[코드 9] 현실적으로 데이터프레임을 만드는 예시

 [코드 9]를 살펴보면 리스트 타입의 변수 3개를 각각 선언하고 그 변수를 .DataFrame() 메서드 안에서 각각의 Key에 대응하는 Values로 대입하고 있습니다. 좀 더 실무적으로 바꾼다면 각 변수를 특정 소스에서 불러온 값에 연결하여 때에 따라 변하는 값을 받도록 할 수도 있겠습니다. 자동화 프레임을 만드는 코드에서는 반드시 변수에 한 번 할당하여 데이터프레임을 생성해 줍시다.

[그림 8] 변수를 Key의 값으로 받는 데이터프레임 생성
[그림 8] 변수를 Key의 값으로 받는 데이터프레임 생성


갈무리

 지금까지 데이터프레임을 생성하는 방법에 대해서 알아보았습니다. 앞으로 데이터프레임을 다루면서 도움이 되었기를 바라면서 글을 마칩니다. 혹시 또 다른 내용이 추가된다면 그 내용에 대한 변동사항을 갈무리에서 언급할 예정입니다. 내용이 달라진 부분을 바로 읽기를 원한다면 갈무리에서 제공하는 색인을 보고 글이 있는 부분을 찾아가시기 바랍니다.

 

반응형