Summary
Data wrangling은 원본 데이터를 정제하고 사용 가능한 형태로 구성하기 위한 변환 과정을 광범위하게 의미하는 비공식적인 용어입니다. 사용하는 가장 일반적인 구조는 데이터프레임입니다.
* 데이터프레임 만들기 (3.1)
- pandas에 데이터프레임 객체 만들 수 있는 다양한 방법 존재
- DataFrame 클래스 사용: pd.DataFrame()
- 원본 리스트 전달: pd.DataFrame(data, columns=['a', 'b'])
- numpy 배열 주입: pd.DataFrame(np.array(data), columns=['a', 'b'])
- dictionary 전달: pd.DataFrame(dictionary)
* 데이터 설명하기 (3.2)
- 차원 확인: dataframe.shape
- 열 개수 확인: dataframe.count() (3.7)
- 수치형 열 통계값 확인: dataframe.describe()
- 수치형 열 상관계수 확인: dataframe.corr() (3.7)
- 수치형 열 공분산 확인: dataframe.cov() (3.7)
* 데이터프레임 탐색하기 (3.3)
- loc: 데이터프레임 인덱스가 label(문자열 등)일 때 사용.
dataframe.loc['hubert']
- iloc: 데이터프레임의 위치 참조.
dataframe.iloc[0]
- loc, iloc 메서드의 슬라이싱은 python 슬라이싱과 달리 마지막 인덱스를 포함
* 데이터프레임 수정
- 값 치환: replace 메서드. (3.5)
dataframe['column'].replace('hubert', 'ashley')
- 열 이름 변경: rename 메서드. (3.6)
dataframe.rename(columns={'Name': 'Nickname'})
- 열 삭제 I: drop 메서드와 열 이름. (3.10)
dataframe.drop('Name', axis=1)
- 열 삭제 II: drop 메서드와 열 인덱스. (3.10)
dataframe.drop(dataframe.columns[0], axis=1)
- 행 삭제 I: 불리언 조건. (3.11)
dataframe[dataframe['Name'] != False]
- 행 삭제 II: 행 인덱스. (3.11)
dataframe[dataframe.index != 0]
- 중복행 삭제: drop_duplicates 메서드 사용 (3.12)
* 데이터프레임 고유한 값 처리 (3.8)
- 열 내부 고유한 값 찾기: unique 메서드.
dataframe['Name'].unique()
- 열 내부 고유한 값 count: value_counts 메서드.
dataframe['Name'].value_counts()
- 데이터프레임 전체 고유한 값 count: nunique 메서드.
dataframe.nunique()
* 데이터프레임 누락된 값 (3.9)
- 누락 값 여부 확인: isnull/notnull 메서드.
dataframe['Name'].isnull()
dataframe['Name'].isnull()
* 데이터프레임 그룹핑
- 값에 따라 행 그룹핑: groupby 메서드.
datafeamr.groupby(['Name'])['Age'].mean() (3.13)
- 시간에 따라 행 그룹핑: resample 메서드. index를 time range(datetime format)로 변경한 뒤 적용.
dataframe.resample('W').sum() (3.14)
- 그룹에 함수 적용하기: groupby로 행을 그룹핑하고 각 그룹에 apply 메서드 연결.
dataframe.groupby('Name').apply(lambda x: x.count()) (3.17)
* 데이터프레임 모든 열 원소에 함수 적용하기 (3.16)
- apply 메서드: 열의 모든 원소에 내장 함수나 사용자 정의 함수 적용. 매개변수를 지정할 수 있음.
dataframe['Name'].apply(uppercase)
dataframe['Name'].apply(labbda x, age: x < age, age=40)
- map 메서드: apply와 비슷하지만 dictionary를 input으로 넣을 수 있음.
dataframe['Name'].map({True: 1, False: 0})
* 데이터프레임 연결하기 (3.18)
- 행 방향으로 연결하기: concat 함수에 axis=0 매개변수 사용.
pd.concat([dataframe_a, dataframe_b], axis=0)
- 열 방향으로 연결하기: concat 함수에 axis=1 매개변수 사용.
pd.concat([dataframe_a, dataframe_b], axis=1)
* 데이터프레임 병합하기 (3.19)
- inner join: merge 메서드 사용하며 on 매개변수에 병합 열 지정.
pd.merge(dataframe_a, dataframe_b, on='Name')
- outer/left/right join: merge 메서드 사용하며 how 매개변수에 outer/left/right 사용.
pd.merge((dataframe_a, dataframe_b, on='Name', how='outer')
- left_on & right_on: 각 데이터프레임에서 병합하기 위한 열 이름 지정.
pd.merge(dataframe_a, dataframe_b, left_on='Name', right_on='Age')
- left_index & right_index: 열 기준 대신 인덱스를 기준으로 병합.
pd.merge(datafeamr_a, dataframe_b, left_index=True, right_index=True)
* Summary in Summary
- merge 연산을 위해 세 가지 사항을 지정
1. 병합할 두 개의 데이터프레임 지정
2. 병합하기 위한 열 이름 지정
3. 'how' 매개변수로 병합연산 종류 지정
1) inner: 두 데이터프레임에 모두 존재하는 행만 반환
2) outer: 두 데이터프레임의 모든 행 반환
3) left: 왼쪽 데이터프레임의 모든 행 반환
4) right: 오른쪽 데이터프레임의 모든 행 반환