pandas
pan el da ta 의 줄임말인 pandas 는 구조화된 데이터의 처리를 지원하는 파이썬의 라이브러리이다.
Series
DataFrame중 하나의 Column에 해당하는 데이터의 모음 Object
값에 접근하기 위해서는 data의 index 를 이용한다.
data index를 이용하여 값을 할당할 수 도 있다.
dataframe
▮ lambda, map, apply
Series 데이터에도 map을 적용할 수 있다.
dict나 다른 Series 데이터로 같은 위치의 데이터를 교체하고 없는 값은 NaN으로 교체할 수 있다.
df.sex.replace({'male':0, 'female':1})
apply : column 단위로 구할 때 주로 사용한다.
applymap : 모든 칼럼에 다 적용
f = lambda x : -x
df_info['age'].apply(f)
Groupby
1개 이상의 컬럼을 Groupby할 수도 있다.
▮ Hierarchical index
Goupby 명령의 결과물도 결국에는 DataFrame이다.
두 개의 column으로 groupby를 할 경우, index가 두 개 생성된다.
unstack()
Groupby으로 묶여진 데이터를 matrix 형태로 전환해준다.
reset_index()
Groupby로 묶인 데이터를 다시 풀어준다.
swaplevel()
Groupby 기준 인덱스의 레벨을 바꾸어준다.
sort_index( ) / sort_values( )
지정한 level의 인덱스를 기준으로 인덱스를 sorting한다.
값을 기준으로 인덱스를 sorting한다.
▮ grouped
Groupby에 의해 Split된 상태를 추출 가능하다.
특정 key값을 가진 그룹의 정보만 추출 가능하다.
key, value 상태로 뽑을 수 있는 상태 = grouped 상태
Tuple 형태로 그룹의 key 값, Value값이 추출할 수 있다.
Aggregation (agg)
grouped 된 상태에서 컬럼별로 연산을 진행한다.
그룹별로 컬럼에 적용요약된 통계정보를 추출해준다. (sum, min)
특정 컬럼에 여러개의 function을 apply할 수도 있다.
Transofrmation
Aggregation과 달리 Key값 별로 요약된 정보가 아니다.
개별 데이터의 변환을 지원한다.
단, max나 min처럼 Series 데이터에 적용되는 데이터들은 Key값을 기준으로 Grouped된 데이터를 기준으로 반환한다.
filter
Pivot Table
excel에서의 피벗테이블과 같다.
index축은 groupby와 동일하다
column에 추가로 labeling 값을 추가하여 value에 numeric type 값을 aggregation하는 형태이다.
더보기
pivot table을 사용하지 않고 groupby를 사용하고 싶다면
df.groupby(["month", "item", "network"])["duration"].sum().unstack()
Crosstab
특히 두 column의 교차 빈도, 비율, 덧셈 등을 구할 때 사용한다.
Pivot table의 특수한 형태
User-Item Rating Matrix 등을 만들 때 사용가능하다.
merge & concat
SQL에서 많이 사용하는 Merge와 같은 기능이다.
두 개의 데이터를 하나로 합친다.
▮ merge
on : 공통적으로 있는 컬럼에 대한 merge 진행
pd.merge(df_a, df_b, on = '컬럼명')
pd.merge(df_a, df_b, left_on = '좌측df컬럼명', right_on = '우측df컬럼명')
pd.merge(df_a, df_b, on="subject_id", how="left") # left join → left 쪽의 데이터만 보여주고 없으면 NaN
pd.merge(df_a, df_b, on="subject_id", how="right") # right join
pd.merge(df_a, df_b, on="subject_id", how="outer") # full(outer) join → 양쪽을 다 살림, 빈곳은 NaN # full : 일단 같은거 붙이고, 없는건 정리하여 붙임
pd.merge(df_a, df_b, on="subject_id", how="inner") # inner join (default) 양쪽 다 같은 값이 있을때
컬럼명이 아닌 index를 기준으로 merge할 때 사용한다.
인덱스 값을 기준으로 붙인다. - 인덱스 값은 지정하지 않았을 경우에 숫자임
- 동일 컬럼명이 존재할 시에 _x, _y가 컬럼명 뒤에 붙는다.
▮ concat
같은 형태의 데이터(DataFrame)를 붙이는 연산작업
merge와 다른 점은 전체를 붙인다는 점에 있다.
df_new = pd.concat([df_a, df_b], axis = 1)
부스트캠프 AI Tech 교육 자료를 참고하였습니다.