
결측치 처리는 대표적으로,
- 결측치 제거
- 평균값(mean), 중앙값(median), 빈도값(mode), 0으로 대체
- 예측모델을 이용하여 대체
하는 방식이 주로 이루어짐
가장 쉽고 좋은 방법은 결측치가 포함된 행 또는 열을 삭제하는 것
결측치는 사전에 발생하지 않도록 조치하는 것이 좋음
결측치를 처리할 경우 도메인지식은 필수적이며, 결측치를 다른 값으로 대체할 경우 어떠한 값으로 할지에 대한 적절한 의사결정이 필요함
Pandas의 경우 누락된 데이터를 나타내기 위해 np.nan이라는 값을 사용하며 계산에 포함되지 안흠
isna 또는 notna 함수를 통해서만 비교 가능dropnafillna(<대체값>)# 난수를 생성하여 음수인 경우 NaN, 양수인 경우 원래값을 가지도록 데이터프레임 생성
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,5), columns = ['A', 'B', 'C', 'D', 'E'])
df = df[df>0]
df




axis : 행 또는 열의 결측치를 삭제how : 삭제방법 설정any : 1개라도 NaN이 존재하는 행 또는 열을 삭제(기본값)all : 모든 NaN인 행 또는 열을 삭제thresh : 삭제기준 설정inplace : 원본데이터 변경 여부 지정
ffill : 결측치가 발생한 이전 값으로 대체bfill : 결측치가 발생한 이후 값으로 대체

groupby함수를 이용하여 그룹별 집계 결과를 계산groupby는 데이터를 그룹별로 분할하고(Splitting), 각 그룹별로 집계함수를 적용(Applying) 후 결과를 하나로 합친(Combining) 결과를 반환함groupby는 다양한 형태로 사용가능함# 그룹기준이 1개인 경우
dataframe.groupby(그룹기준)
# 그룹기준이 N개인 경우
dataframe.groupby([그룹기준1,..., 그룹기준N])
# 집계대상이 1개인 경우
dataframe.groupby(그룹기준)[집계대상]
# 집계대상이 N인경우
dataframe.groupby(그룹기준)[[집계대상1,...,집계대상N]]
# 집계함수가 1개인 경우
dataframe.groupby(그룹기준)[집계대상].집계함수()
# 집계함수가 N개인 겨우
dataframe.groupby(그룹기준).agg([집계함수1,...,집계함수N])
df = pd.DataFrame({
'X1': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'X2': [3, 1, 0, 1, 7, 3, 2, 1, 3],
'X3': [1, 2, 5, 6, 2, 3, 4, 1, 2]
})
df
| X1 | X2 | X3 |
|---|---|---|
| A | 3 | 1 |
| A | 1 | 2 |
| A | 0 | 5 |
| B | 1 | 6 |
| B | 7 | 2 |
| B | 3 | 3 |
| C | 2 | 4 |
| C | 1 | 1 |
| C | 3 | 2 |


pivot_table(values, index, columns, aggfunc, fill_value)values : 집계하려는 열의 Label 혹은 Label 리스트index : 피벗테이블 행의 그룹으로 묶을 열의 Label이나 그룹 키columns : 피벗테이블 열의 그룹으로 묶을 열의 Label이나 그룹 키aggfunc : 집계함수나 함수리스트 (기본값은 mean)fill_value : 누락된값의 대체값df['D'] = ['X', 'X', 'Y', 'X', 'Y', 'X', 'X', 'Y', 'X']
df
| X1 | X2 | X3 | D |
|---|---|---|---|
| A | 3 | 1 | X |
| A | 1 | 2 | X |
| A | 0 | 5 | Y |
| B | 1 | 6 | X |
| B | 7 | 2 | Y |
| B | 3 | 3 | X |
| C | 2 | 4 | X |
| C | 1 | 1 | Y |
| C | 3 | 2 | X |
# 행을 x1으로, 열을 D로 하는 그룹의 'x2', 'x3'컬럼의 합계
df.pivot_table(index='X1', columns='D', values=['X2','X3'], aggfunc='sum')

concat() : 단순히 DataFrame을 연결(인덱스기준)merge() : 특정한 기준으로 DataFrame을 연결(열의 값 기준)pandas.concat([dataframe,...dataframe], axis, join, ignore_index)
axisjoinignore_index| K | X1 | X2 |
|---|---|---|
| K0 | A | 1 |
| K1 | B | 2 |
| K2 | C | 3 |
| K | X2 | X3 |
|---|---|---|
| K1 | B | 4 |
| K2 | A | 5 |
| K3 | D | 6 |


pandas.merge(on, how)
on : 기준이 되는 열, 행의 데이터를 키(Key)라고 하며, 병합기준이 될 컬럼을 on으로 설정how : 결합 방법inner : 키가 중복되어 존재하는 경우만 결합outer : 동일한 키가 없는 경우 NaN으로 대체하여 결합left : 왼쪽 DataFrame의 키를 기준으로 결합right : 오른쪽 DataFrame의 키를 기준으로 결합