티스토리 뷰

데이터 분석을 위해서 numpy와 관련된 포스팅을 진행했었는데, 이를 더욱 응용할 수 있는 것이 바로 pandas입니다. numpy로 생성한 배열을 엑셀과 같은 csv형태로 만들어주는 pandas에 대해서 포스팅 진행하겠습니다.

파이썬 pandas
pandas를 사용하는 이유
pandas의 Series
pandas 데이터 index 변경하기
pandas의 DataFrame

DataFrame과 딕셔너리

 

pandas를 사용하는 이유

pandas는 파이썬에서 제공하는 데이터 처리에 최적화된 라이브러리입니다. numpy는 배열 형태의 데이터를 생성하고 다룰 수 있지만 pandas는 데이터 타입을 더욱 다양하게 활용할 수 있습니다. 그리고 엑셀 파일과 유사한 csv파일 형태로 데이터를 다룰 수 있고, 행과 열을 기준으로 데이터 처리 및 연산까지 가능합니다. 이번 포스팅부터 파이썬의 pandas에 대해 천천히 그리고 자세히 알아보도록 하겠습니다.

 

pandas의 Series

Series()를 이용하면 pandas의 1차원 형태의 데이터를 배열 형태로 생성할 수 있습니다. Series() 메서드의 인자는 리스트, 튜플 등등 자료구조를 사용할 수 있습니다. 그리고 index라는 요소로 pandas데이터의 행을 나타낼 수 있습니다. 아래 간단한 예제를 통해 Series메서드를 이용해서 pandas 데이터를 생성해보겠습니다.

import pandas as pd
data = pd.Series(['A','B','C','D','E'])
print(data)
실행 결과
0 A
1 B
2 C
3 D
4 E
dtype: object

pandas를 이용해서 알파벳 A부터 E까지 데이터를 생성하였습니다. data라는 변수에 이를 저장하여 출력했더니 저희는 입력하지 않았던 행의 번호가 0번부터 4번까지 함께 출력되었습니다. 즉, pandas데이터는 index와 그 index마다 지정된 values값을 함께 저장하고 있습니다. 이를 따로 출력하여 index와 values를 확인해보겠습니다.

import pandas as pd
data = pd.Series(['A','B','C','D','E'])
print(data.index)
print(data.values)
실행 결과
RangeIndex(start=0, stop=5, step=1)
['A' 'B' 'C' 'D' 'E']

위의 실행결과를 자세히 확인해보겠습니다. data라는 변수에 pandas 데이터를 저장하고 pandas데이터의 index와 values값을 각각 출력했습니다. 

index를 출력했을 때는 시작과 끝의 범위를 출력하고 있는데 시작은 0번부터 시작하며 stop이라고 출력되는 끝부분은 pandas index의 개수를 의미합니다. 그리고 step은 index번호의 간격을 의미합니다.

values를 출력하면 pandas에 어떤 데이터가 있는지 내용을 출력해줍니다. 변수에 알파벳 A부터 E까지 저장을 해두었으니 당연히 A부터 E까지 저장된 문자열 변수가 출력됩니다.

 

pandas 데이터 index 변경하기

pandas 데이터는 index가 따로 정해져 있는데 그냥 출력하게 되면 이 데이터가 어떠한 데이터인지 쉽게 확인이 불가능합니다. 즉, 데이터 가공을 추가로 하려고 할 때도 그 데이터가 무슨 데이터인지 확인하기가 어렵죠. 이로 인해서 index를 변수화 하여 변경하면 어떤 데이터가 저장되어있는지 확인하기 쉽습니다. 아래는 이를 구현한 코드 예시입니다.

import pandas as pd
#1
score = pd.Series([90,100,95,80,85])
print(score)

#2
subject = ['국어','수학','영어','사회','과학']
score = pd.Series([90,100,95,80,85], index=subject)
print(score)
#1 실행 결과
0 90
1 100
2 95
3 80
4 85
dtype: int64

#2 실행 결과
국어     90
수학    100
영어     95
사회     80
과학     85
dtype: int64

#1에서는 index에 어떠한 것도 지정하지 않았으므로 데이터가 무엇을 의미하는지 확인하기 어렵습니다. 하지만 #2의 경우에 index에 과목명을 변수 화하여 출력하였더니 각 행의 데이터가 어떤 데이터인지 쉽게 확인할 수 있습니다. 이러한 방법으로 pandas데이터를 알기 쉽게 가공할 수 있습니다.

 

pandas의 DataFrame

Series는 1차원 데이터만 생성이 가능하다고 말씀드렸는데 조금 더 엑셀스러운 csv데이터를 생성하려면 어떤 방식을 사용해야 할까요? 바로 DataFrame이라는 메서드를 이용하여 생성할 수 있습니다. 바로 예시를 통해 확인해보겠습니다.

import pandas as pd
#1
score = pd.DataFrame([[90,85,100],[100,95,85],[95,100,90],[80,80,90],[85,95,100]])
print(score)

#2
subject = ['국어','수학','영어','사회','과학']
name = ['갑','을','병']
score = pd.DataFrame([[90,85,100],[100,95,85],[95,100,90],[80,80,90],[85,95,100]],index=subject, columns=name)
print(score)
#1 실행 결과
    0  1   2
0 90 85 100
1 100 95 85
2 95 100 90
3 80 80 90
4 85 95 100

#2 실행 결과

       갑 을 병
국어 90 85 100
수학 100 95 85
영어 95 100 90
사회 80 80 90
과학 85 95 100

Series에서 적용했던 index지정에서 columns가 추가되었습니다. Columns를 이용해서 데이터의 열에 어떤 데이터가 있는지 지정하는 것도 가능합니다. 한 차원 더 정리된 데이터처럼 되었죠? 이러한 방법으로 pandas를 이용하여 데이터를 생성할 수 있습니다.

 

DataFrame과 딕셔너리

DataFrame에 딕셔너리 자료구조를 사용하면 어떠한 방법으로 데이터가 생성이 될까요? 딕셔너리는 key값과 value값을 가지고 있는데 이러한 자료구조가 어떠한 방식으로 dataframe으로 구현되는지 아래 예시를 통해 확인해보겠습니다.

import pandas as pd

subject = ['국어','수학','영어','사회','과학']
data = {'갑' : [90,100,95,80,85] , '을' : [85,95,100,80,95], '병' : [100,85,90,90,100]}
table = pd.DataFrame(data,index=subject)
print(table)
실행 결과
       갑 을 병
국어 90 85 100
수학 100 95 85
영어 95 100 90
사회 80 80 90
과학 85 95 100

딕셔너리의 key값이 column으로 들어가서 데이터가 만들어지고, 각 key값에 해당하는 value가 차례대로 첫 번째 행으로 들어갑니다. 그리고 index값은 위에서 지정한 것처럼 과목명이 들어가도록 설정하였습니다. 이제 pandas를 이용하여 데이터를 생성하는 방법에 대해 간단한 정리가 끝이 났습니다. 해당 방법들 잘 익혀두시고 적절하게 사용하시기 바랍니다.

댓글
공지사항