판다스

판다스(pandas)는 파이썬 라이브러리로 데이터 처리, 가공 및 분석을 편리하게 한다. 판다스를 사용하기 위해서는 다음과 같이 라이브러리를 불러 들인다.

이 장에서는 판다스 기본 자료형인 시리즈와 데이터프레임 기초 사용법을 배운다. 각각의 자료형 만들기, 접근하기 등에 대해서 배운다.

In [1]: import pandas as pd

as pdpandas의 별칭으로 pd를 사용한다는 뜻이다. 즉, 다음과 같이 사용한다.

In [2]: pd.DataFrame([1, 2, 3])
Out[2]: 
   0
0  1
1  2
2  3

판다스 자료형

판다스 자료형은 크게 시리즈(Series)와 데이터프레임(DataFrame)으로 이루어진다. 시리즈란 1차원 자료를 나타내기 위한 자료형이고 데이터프레임은 2차원 자료를 나타내기 위한 자료형이다. 특별히 시리즈는 시계열(Time Series) 자료를 나타내는데 유용하다.

시리즈(Series)

시리즈는 일차원 배열로 이루어진 연속적인 들과 인덱스로 불리는 자료 라벨(label) 배열로 이루어진 객체이다. 파이썬 리스트로부터 간단한 시리즈를 다음과 같이 만들 수 있다.

In [3]: ser = pd.Series([1, 2, 3])

시리즈의 인덱스와 값은 다음과 같이 접근할 수 있다.

In [4]: ser.index
Out[4]: RangeIndex(start=0, stop=3, step=1)

In [5]: ser.values
Out[5]: array([1, 2, 3], dtype=int64)

데이터프레임

데이터프레임은 같은 크기의 자료들로 이루어진 열들을 차례로 모아 놓은 직사각 모양의 자료형이다. 데이터프레임의 열과 행은 각각 인덱스를 가지고 있다. 데이터프레임을 만드는 방법은 여러가지가 있지만 가장 쉬운 방법은 같은 크기의 리스트 또는 넘파이 배열을 값으로 갖는 사전형을 사용하는 것이다.

In [6]: data = {'지역': ['대전', '대전', '대전', '서울', '서울', '서울'],
   ...:       '년도': [2015, 2016, 2017, 2015, 2016, 2017],
   ...:       '인구': [1542, 1535, 1531, 9941, 9852, 9776]}
   ...: df = pd.DataFrame(data)
   ...: df
   ...: 
Out[6]: 
   지역    년도    인구
0  대전  2015  1542
1  대전  2016  1535
2  대전  2017  1531
3  서울  2015  9941
4  서울  2016  9852
5  서울  2017  9776

데이터프레임은 열 인덱스(columns), 행 인덱스(index)값(values)들로 이루어진다.

In [7]: df.columns
Out[7]: Index(['지역', '년도', '인구'], dtype='object')

In [8]: df.index
Out[8]: RangeIndex(start=0, stop=6, step=1)

In [9]: df.values
Out[9]: 
array([['대전', 2015, 1542],
       ['대전', 2016, 1535],
       ['대전', 2017, 1531],
       ['서울', 2015, 9941],
       ['서울', 2016, 9852],
       ['서울', 2017, 9776]], dtype=object)

인덱스

인덱스란 자료를 구분하기 편리하도록 이름을 행과 열에 이름을 붙여 사용하기 위한 개념이다. 자료형을 만들 때 인덱스를 입력하지 않으면 자동으로 0부터 시작하는 정수형 인덱스가 만들어 진다.

다음은 정수 0부터 4까지를 레이블로 갖는 인덱스를 만든다.

In [10]: pd.Index(np.arange(5))
Out[10]: Int64Index([0, 1, 2, 3, 4], dtype='int64')

다음은 문자 a부터 d까지 레이블을 갖는 인덱스를 만든다.

In [11]: ridx = pd.Index(list('abcd'))

위에서 만든 인덱스를 이용해서 시리즈와 데이터프레임의 인덱스로 설정할 수 있다.

In [12]: pd.Series([1, 2, 3, 4], index=ridx)
Out[12]: 
a    1
b    2
c    3
d    4
dtype: int64

열인덱스는 대문자 A부터 10개의 문자를 갖도록 하는 데이터프레임을 만들어 보자.

In [13]: cidx = pd.Index([chr(i) for i in range(ord('A'), ord('A') + 10)])
   ....: pd.DataFrame(np.arange(len(ridx) * len(cidx)).reshape(len(ridx), len(cidx)),
   ....:              index=ridx, columns=cidx)
   ....: 
Out[14]: 
    A   B   C   D   E   F   G   H   I   J
a   0   1   2   3   4   5   6   7   8   9
b  10  11  12  13  14  15  16  17  18  19
c  20  21  22  23  24  25  26  27  28  29
d  30  31  32  33  34  35  36  37  38  39