pandas 복습 2
고객의 특성 정보를 활용한 화장품 추천시스템 개발목차
-group by: 그룹별 통계(count, sum 등 함수덧붙여 사용)
-multi index
-multi index를 pivot table로 변환: unstack
-reset_index() *
-fillna: 결측치 채우기
-dropna: 결측치 있는 row/column 제거
-drop_duplicate: 중복치 있는 row/column 제거
(keep: first/last 옵션 가능)
-drop: 행,열 제거
-데이터프레임 합치기(옆으로 합치기axis=1, 아래로 합치기sort=False)
Import pandas as pd
1) Group by : 그룹별 통계
df. groupby('소속사') #아무것도 출력 안 됨. 추가적으로 취할 통계함수를 넘겨줘야함
df.groupby('소속사').mean()
mean, sum 등은 산술통계가 가능핸 열만 출력됨
** 특정 column만 소속사별로 통계치 추측
>> df.groupby('소속사')['키'].mean()
2) 복합 index (muli-index)
행 index의 단계가 복합적으로 두 개 이상 구성할 때
ex) 데이터를 그룹으로 묶을 때 혈액형별, 그 중에서도 성별 별로 키의 평균보기
>> df.groupby(['혈액형', '성별']).mean()
2-1) 복합 index 데이터를 피벗테이블로 변환하기
df2 = df.groupby(['혈액형', '성별']).mean()
df2.unstack('혈액형') **혈액형을 기준으로 옆으로 풀어냄
(피봇테이블 형식처럼 데이터를 옆으로 펼쳐줌, index(행)에 있던 것을 column으로)
3) reset_index : 인덱스 초기화
복합 index로 구성된 데이터 프레임의 인덱스를 초기화해줌
데이터 통계를 groupby로 묶어 확인한 다음 요약된 통계본을 따로 데이터프레임으로 만들어 활용할 때 많이 쓴다.
df2.reset_index()
4) 결측치 채우기 fillna()
df['키'].fillna(-1) **()안에 채워주고 싶은 값
채우고 난 후 유지하려면? inplace = True / df['키'] = df['키'].fillna(-1)
*추천하는 방식
df2 = df.copy()
df2['키'] = df2['키'].fillna(-1)
inplace = True 값 줘도 되지만 이렇게 변수에 새로 대입해주는 것을 추천...
** 결측치 평균값으로 채우기
df2 = df.copy()
height_mean = df2['키'].mean()
df2['키'].fillna(height_mean, inplace=True) / df2['키'] = df2['키'].fillna(height_mean)
5) NaN값 있는 행 제거: dropna()
5-1) axis (열/행)
aixs = 0 <기본값> | aixs = 1 |
행 드랍 | 열 드랍 |
df.dropna(axis=0) | df.dropna(axis = 1) |
5-2) how 옵션 : any, all
df.dropna(axis=o, how='all') **모든 행 값이 NaN 값일 때 행을 삭제
df.dropna(axis-0, how='any') **하나의 값이라도 NaN일 때 행을 삭제 <기본값>
*행을 전부 NaN값으로 채우기
import Numpy as np
df.iloc[10] = np.nan (10번째 행의 값을 전부 nan값으로 채우기)
df.dropna(axis = 0, any='all') (dropna 옵션을 all로 줘서 삭제되는지 확인)
6) 중복값 제거 : drop_duplicates() *inplace=True 안됨, keep 옵션
첫번째 나온 값은 유지, 두번째 값부터 삭제(nan값도 첫번째는 유지, 두번째는 삭제)
6-1) column의 중복값 제거
df['키'].drop_duplicates()
*keep='first' (기본값), last로 줄 경우 두번째 값으로 유지됨
df['키'] = df['키'].drop_duplicates(keep='last')
df['키'] = df['키'].drop_duplicates(keep='first')
6-2) 행 전체 제거: 중복값 가지는 행 전체를 삭제
df.drop_duplicates('그룹') **행 전체를 제거하는데, '그룹'이라는 열에서 값이 겹치면 해당되는 행을 전삭한다
*keep 조건 사용 가능
7) 행/열 제거
7-1) 행(row) 제거 : df.drop(index, axis=0) **index number명시(1, 3)
df.drop([1,3], axis=0)
7-2) 열(column) 제거: df.drop('이름', axis=1) **컬럼이름 명시('이름')
df.drop(['그룹', '소속사'], axis=1)
8) DataFrame 합치기 : pd.concat(단순히 합치기) **sort=False, drop=True
8-1) row 기준 합치기 (위아래)
df2 = pd.concat([df, df_copy], sort=False)
*row 기준으로 합칠때는 sort=False를 주어 순서를 유지시킨다.
이 때, 인덱스가 꼬일 수 있음
*df2.reset_index()
*df2.reset_index(drop=True) **새로운 인덱스열 삭제하는 옵션
8-2) column 기준 합치기(옆으로): axis = 1 옵션을 주면 된다
pd.concat([df, df2], axis=1)
* 행의 갯수가 맞지 않는 상태에서 column concat 할 경우