pandas 라이브러리

pandas 는 데이터 처리와 분석을 위한 라이브러리입니다. R의 data.frame을 본떠서 만들었다고 하는데, 저는 R을 모릅니다.

엑셀의 스프레드시트와 비슷한 형태라고 합니다.

테이블을 수정하고 조작하는데 다양한 기능을 제공합니다. SQL처럼 테이블에 쿼리나 조인을 수행할 수 있습니다. 다양한 형식의 데이터를 읽는 것도 유용합니다.

소스코드로 알아보기

import

우선 자주 사용하는 SeriesDataFrame은 따로 임포트하고, pandaspd로 aliasing합니다.

from pandas import Series, DataFrame
import pandas as pd

Series

pandas에서 Series는 1차원 배열과 같은 자료구조입니다.

어떤 면에서는 리스트와, 어떤 면에서는 딕셔너리와 닮은 구조를 지니고 있습니다. 맛보기로 살펴봅시다.

객체 생성

기본적인 생성은 다음과 같이 할 수 있습니다.

obj = Series([1, 9, 9, 7])

인덱스

Series 자료구조의 인덱스는 기본적으로 zero-based numbering 입니다. 따로 설정하지 않으면 기본적으로 배열과 같습니다.

obj
# 0    1
# 1    9
# 2    9
# 3    7
# dtype: int64

obj.values # array([1, 9, 9, 7])
obj.index  # RangeIndex(start=0, stop=4, step=1)

여기서 인덱스를 따로 설정하면 원하는 인덱스를 가질 수 있습니다. 딕셔너리와 비슷한 느낌입니다.

obj2 = Series([1,9,9,7], index = ['x', 'y','a','b'])
obj2
# x    1
# y    9
# a    9
# b    7
# dtype: int64

연산

Series에서는 각각의 인덱스에 맞게 연산 처리가 됩니다.

덧셈

다음은 덧셈 연산에 대한 예시입니다.

mine   = Series([10, 20, 30], index=['naver', 'sk', 'kt'])
friend = Series([10, 30, 20], index=['kt', 'naver', 'sk'])
merge = mine + friend
print(merge)
# kt       40
# naver    40
# sk       40
# dtype: int64

DataFrame

Series가 1차원이라면 DataFrame은 2차원입니다. 여러 개의 칼럼으로 구성된 2차원 형태의 자료는 엑셀, SQL에서 본 형식과 비슷합니다.

객체 생성

기본적인 생성은 다음과 같이 할 수 있습니다.

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame

노트북 주피터에서는 다음과 같이 출력해줍니다.

dataframe-1

이제 어떤 식으로 이 표를 사용할 수 있을지 봅시다.

데이터 처리하기

columns 순서 변경 및 선별

위에서 생성한 표의 컬럼 순서는 다음과 같이 변경 또는 선별할 수 있다.

DataFrame(data, columns = ['year', 'state', 'pop'])
index 순서 변경

현재는 인덱스를 따로 설정하지 않았기에 0 부터 5까지로 되어있다. 다음과 같이 인덱스를 재설정할 수 있다.

frame2 = DataFrame(data, columns = ['year', 'state', 'pop', 'debt'],
                   index = ['one', 'two', 'three', 'four', 'five','six'])
frame2
특정 열/행 값 가져오기

특정 열은 다음과 같이 가져올 수 있습니다.

frame2.year
fram2['year'] # 위 표현과 같은 의미입니다.

특정 행은 다음과 같이 가져올 수 있습니다.

fram2.ix['three']
지우기

다음과 같이 del 명령어로 열 속성을 지울 수 있습니다.

del frame2['year']
전치

numpy와 같이 transpose도 가능합니다.

frame2.T
슬라이싱

일단 귀찮으니 생략합니다. ^^

파일 입출력

table 형식으로 읽을 수도 있으며, csv도 읽을 수 있습니다.

rawData = pd.read_table('test.txt')
rawData2 = pd.read_csv('./test.csv')

REF.