판다스에서는 두 가지 핵심 데이터 구조(data structure)을 사용한다.
(데이터 구조 : 다양한 종류의 데이터 형식(Data type)이 모여 있는 객체이다.)
시리즈 Serise
import pandas as pd #판다스는 주로 pd라는 이름으로 불러온다.
obj = pd.Series([4, 7, -5, 3])
obj
Serise를 출력하면 왼쪽에 인덱스, 오른쪽에 값이 표시된다. 위 예시에서는 레이블을 입력하지 않았기 때문에 디폴트 0부터 시작하는 숫자가 레이블 된다.
obj.values
→ 판다스가 내부적으로 값을 저장할 때 numpy array를 쓰는 것을 알 수있다.
obj.index
→ [ 0부터, 4까지, 1씩 증가 ]하는 정보를 반환한다.
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
obj2
여기서 인덱스(레이블)와 값의 개수는 동일해야 한다. 개수가 다르다면 에러 난다.
obj2['a'] -> -5
따라서 딕셔너리로 시리즈를 만들 수 있다.
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
obj3
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = pd.Series(sdata, index=states)
obj4
값과 인덱스의 길이는 같지만, California 인덱스에 해당하는 값은 없기 때문에 NaN(Not a Number) 발생한다. 이는 결측치(missing data)를 나타내기 위해 pandas에서 가장 자주 쓰이는 방식이다.
pd.notnull(obj4)
obj4.notnull()
pd.isnull(obj4)
obj4.isnull()
obj4.name = 'population'
obj4.index.name = 'state'
obj4
데이터프레임(DataFrame)은 직사각형 모양의 데이터 테이블을 나타내고 컬럼으로 이루어져 있다. 데이터프레임은 시리즈의 모음으로 생각할 수 있다.
데이터프레임은 데이터 분석에서 가장 자주 쓰이는 데이터 구조이다.
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
frame.head(3) # 앞 부분의 3개만 보여준다.
frame.tail(3) # 뒤에서 3개만 보여준다.
pd.DataFrame(data, columns=['year', 'state', 'pop'])
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four', 'five', 'six'])
frame2
frame2['state']
frame2.state #둘 다 동일한 방법이나, 컬럼이름에 띄어쓰기가 있다면 위의 방법으로만 컬럼을 가져올 수 있다.
frame2.loc['three']
frame2['debt'] = 16.5
frame2
val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame2['debt'] = val
frame2
frame2.state == 'Ohio' # 먼저 값이 Ohio만 True가 나오게 한다.
frame2['eastern'] = frame2.state == 'Ohio'
frame2