Ch5. Pandas
Series & DataFrame
Series
일련의 객체를 담을 수 있는 1차원 배열 같은 자료구조(어떤 NumPy 자료형도 담을 수 있다). 색인이라고 하는 배열의 데이터와 연관된 이름을 가지고 있다.
Series 객체의 문자열 표현은 왼쪽에 색인을 보여주고 오른쪽에 해당 색인의 값을 보여준다.(pd.Series 할때 대소문자가 틀리면 error) index를 지정하지 않으면 0, 1, ....,n으로 표시. 색인에 str, int형 다 가능하다. NumPy 배열과 비교해서, 단일 값을 선택하거나 여러 값을 선택할 때 색인으로 라벨을 사용할 수 있다.
obj2 = pd.Series([4,7,-5,3] , index=['d',0,'b','c'])
obj2
불리언 배열을 사용해서 값을 걸러 내거나, 산술 연산을 수행해도 색인-값 연결이 유지된다.
obj2[obj2>0]
>>d 4
0 7
c 3
딕셔너리 객체로부터 Series 객체를 생성할 수 있다. 만일 인덱스를 설정했는데 값이 없으면 NaN으로 표시된다. 인덱스를 설정했는데 값이 없으면 NaN으로 표시된다. Null 값을 확인하는 것은 pd.isnull() 혹은 pd.notnull()함수 사용
sdata={'ohio':35000, 'texas':71000,'oregon':16000,'utah':5000}
obj3=pd.Series(sdata)
obj3
>>ohio 35000
texas 71000
oregon 16000
utah 5000
DataFrame
표 같은 스프레드시트 형식의 자료구조. 여러개의 칼럼이 있는데 각 컬럼은 서로 다른 종류의 값(숫자, 문자열, 불리언 등)을 담을 수 있다. 물리적으로 DataFrame은 2차원이지만, 계층적 색인을 이용해서 좀 더 고차원의 데이터를 표현할 수 있다. 원하는 순서대로 칼럼을 지정하면 원하는 순서를 가진 DataFrame 객체가 생성된다. 로우의 위치나 loc 속성을 이용해서 이름을 통해 접근할 수 있다
data={'state':['ohio','ohio','ohio','nevada','nevada','mevada'],
'year':[2000,2001,2002,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame=pd.DataFrame(data)
frame2=pd.DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five','six'])
frame2
DataFrame에서 리스트형 인덱스를 다루는 부분은 리스트와도 비슷하다. 키-값 다루는 부분은 딕셔너리와 비슷하다.
재색인 reindex() : 새 인덱스에 존재하지 않는 값이 있으면 NaN으로 표기. 로우, 칼럼 다 재색인 가능. method : 재색인할 때 누락된 값을 직전 값으로 채울 수 있다(시계열 분석에 용이) fill_value : 재색인 과정 중에서 나타나는 빈 값을 채우는 값.
obj
>>0 blue
2 purple
4 yellow
obj3.reindex(range(6),method='ffill')
>>0 blue
1 blue
2 purple
3 purple
4 yellow
5 yellow
삭제 drop : 로(행), 칼럼(열) 다 삭제 가능. 단, 로 삭제는 해당 로우 이름만 넘기면 되지만, 칼럼을 삭제할 경우에는 drop(['칼럼 리스트명1','칼럼 리스트명2']), axis=1) 로 입력해야함. (axis=1 대신 axis='columns'도 가능) 재색인, 삭제등 모든 것은 로 기준이다. 칼럼을 선택할 때는 칼럼을 선택한다고 추가 입력해주어여 함.
색인/ 선택/ 거르기 라벨 이름으로 슬라이싱하면 시작점과 끝점을 포함한다는 것일 일반 파이썬에서의 슬라이싱과 다른 점이다. 칼럼을 가져올 때는 [ : ] 대신 [ , ]사용.
obj
>> a 0.0
b 1.0
c 2.0
d 3.0
obj['b':'c']
>> b 1.0
c 2.0
연산자를 사용하여 스칼라 비교를 할 수 있으며, 불리언으로 값 바꿀 수 있다 축 이름은 loc ( ) , 정수 색인은 iloc () 사용
data
>> one two three four
ohio 0 1 2 3
colo 4 5 6 7
utah 8 9 10 11
newyork 12 13 14 15
data[data<5]=0
>> one two three four
ohio 0 0 0 0
colo 0 5 6 7
utah 8 9 10 11
newyork 12 13 14 15
연 series : 객체간 산술 연산을 할 때 서로 겹치는 색인이 없으면 NA값 나온다. dataframe : 각 dataframe에 있는 색인과 칼럼이 하나로 합쳐진다. 공통되는 칼럼 라벨이나, 로우 라벨 없으면 결과에 아무것도 나오지 않는다.

df1에 add 메서드 사용하고, df2와 fill_value 값을 인자로 전달하면 연산이 된다. DataFrame과 Series간의 산술 연산은 Series의 색인을 DataFrame의 컬럼에 맞추고 아래 로우로 전파한다.

연산에 apply 메서드를 사용해 lambda도 사용할 수 있다. 배열에 대한 일반적인 통계(sum, mean 등)등 DataFrame의 메서드로 존재하므로 apply 메서드를 사용할 필요 없다. apply 메서드에 전달된 함수는 스칼라값을 반환할 필요가 없기 때문에 여러값을 가진 series를 반환해도 된다.

정렬과 순위 로우나 컬럼의 색인을 알파벳순으로 정렬하려면 sort_index() 메서드 사용. 값에 따라 정렬하고 싶으면 sort_values() 사용. ascending = False 를 사용하면 내림차순으로도 정렬할 수 있다. 비어 있는 값은 기본적으로 가장 마지막에 위치.
중복된 색인이 있는 경우, 중복된 색인을 찾으면 해당하는 값들이 다 나온다
기술 통계 계산과 요약 NA 있을 때 누락된 데이터를 제외하고 계산하는 경우 : sum, cumsum 계 산하려는 값에 NA이 있을 때 NA로 표기되는 경우 : mean describe : 각 컬럼에 대한 요약 통계를 계산한다. 수치 데이터가 아닐 경우 다른 요약 통계를 생성 ex)count
corr : 상관관계 분석 (corrwith 메서드를 사용하면 다른 Series나 DataFrame의 상관관계를 계산) cov : 공분산 unique, isin, match, value_counts 등으로 유일값을 구할 수 있다.
Last updated
Was this helpful?