부스트캠프 AI Tech 4기
7. Pandas
StoneSeller
2022. 9. 23. 18:55
pandas
panel data 의 줄임말인 pandas는 구조화된 데이터의 처리를 지원하는 파이썬의 라이브러리이다.
Series
- DataFrame중 하나의 Column에 해당하는 데이터의 모음 Object
- 값에 접근하기 위해서는 data의 index를 이용한다.
- data index를 이용하여 값을 할당할 수 도 있다.
dataframe
▮ lambda, map, apply
Series 데이터에도 map을 적용할 수 있다.
- dict나 다른 Series 데이터로 같은 위치의 데이터를 교체하고 없는 값은 NaN으로 교체할 수 있다.
- replace
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 = '컬럼명')
- 두 df의 column명이 다를 때 사용
pd.merge(df_a, df_b, left_on = '좌측df컬럼명', right_on = '우측df컬럼명')
- how
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 based join
컬럼명이 아닌 index를 기준으로 merge할 때 사용한다.
인덱스 값을 기준으로 붙인다.
- 인덱스 값은 지정하지 않았을 경우에 숫자임
- 동일 컬럼명이 존재할 시에 _x, _y가 컬럼명 뒤에 붙는다.
▮ concat
- 같은 형태의 데이터(DataFrame)를 붙이는 연산작업
- merge와 다른 점은 전체를 붙인다는 점에 있다.
df_new = pd.concat([df_a, df_b], axis = 1)
부스트캠프 AI Tech 교육 자료를 참고하였습니다.
728x90