누락값 처리: SAS에서 Python으로의 전환 경험
카테고리
데이터 과학/AI
서브카테고리
데이터 분석
대상자
데이터 분석 초보자, SAS에서 Python으로 전환하는 개발자, 누락값 처리 기술 필요 인력
핵심 요약
- SAS와 pandas의 누락값 표현 방식 차이
- SAS: .
(숫자), ''
(문자), ._
(정렬 우선순위)
- pandas: np.nan
, pd.NA
, pd.NaT
(데이터 타입별)
- 누락값 정렬 규칙
- SAS: . < .A–.Z < -n < 0 < +n
- pandas: 누락값 기본적으로 끝에 배치 (na_position='last'
)
- 누락값 처리 전략
- fillna()
, interpolate()
, groupby()
기반 대체, 통계적 메소드 (평균/중간값) 활용
섹션별 세부 요약
1. 누락값 표현 방식 비교
- SAS는 숫자형 누락값을
.
으로, 문자형을''
으로 표현하며 특수 누락값.A–.Z
제공 - Python에서는
np.nan
(부동소수점),pd.NaT
(시간),pd.NA
(nullable 타입) 사용 - pandas의
string
dtype은pd.NA
를,datetime64[ns]
은pd.NaT
를 사용
2. 정렬 시 누락값 처리
- SAS: 누락값은 정렬 시
. < .A–.Z < -n < 0 < +n
순서로 배치 - pandas: 기본값은 누락값을 끝에 배치 (
na_position='last'
) df.sort_values(..., na_position='first')
로 SAS 방식 모방 가능
3. 누락값 탐지 방법
- SAS:
missing(x)
,x = .
,x = ''
조건 사용 - Python:
pd.isna(x)
,pd.isnull(x)
함수 사용 (동일 기능)
4. 누락값 대체 전략
- 상수 대체:
df.fillna(0)
또는df.fillna('unknown')
- 다른 컬럼 대체:
df['col_a'].fillna(df['col_b'])
,combine_first()
사용 - 전방/후방 채움:
method='ffill'
,method='bfill'
사용 - 보간:
df['col'].interpolate()
(선형 보간 기본) - 그룹 기반 채움:
groupby()
+transform()
활용 - 통계 기반 채움: 평균, 중간값, 최빈값 사용 (
mean()
,median()
,mode()
)
5. SAS vs Python 실무 예제
- 필터링 비교:
- SAS: where x < 0
→ . < 0
포함
- pandas: df[df['x'] < 0]
→ NaN
제외
- 대응 방법: df[(df['x'] < 0) | (df['x'].isna())]
- 등가 비교:
- SAS: . = .
→ Equal
출력
- Python: np.nan == np.nan
→ False
- 대응 방법: pd.isna(a) and pd.isna(b)
조건 추가
- 그룹핑 비교:
- SAS: PROC SQL
에서 .
포함
- pandas: groupby(..., dropna=False)
사용
결론
- 실무 팁:
- 누락값 처리 시 SAS와 pandas의 차이를 명확히 인지해야 함
- fillna()
, interpolate()
, groupby()
등의 pandas 기능을 활용해 누락값을 유연하게 대체
- 정렬/비교 시 na_position
, dropna=False
등의 파라미터를 사용해 SAS와 동일한 동작 구현 가능