결측값 처리의 SAS와 Python 비교: 데이터 분석에서의 실전 팁
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
데이터 분석
대상자
데이터 분석 및 Python 초보자. SAS에서 Python으로 전환하는 분들에게 유용하며, 결측값 처리 기술을 배우고자 하는 사람들에게 적합하다.
핵심 요약
- SAS와 Python(pandas)의 결측값 처리 방식 차이점
- SAS는
.
로 결측값 표기, pandas는np.nan
,pd.NA
사용 - SAS 정렬 시 결측값이 먼저 배치, pandas는 기본값으로 뒤에 배치
- 결측값 검출 및 처리 방법 비교
- SAS:
missing()
함수 사용, pandas:pd.isna()
사용 - 결측값 채우기: 상수, 다른 컬럼, forward/backward fill, 보간, 그룹 기반, 통계 기반 등
- 실무 적용 팁
NaN == NaN
은False
를 반환하므로pd.isna()
로 비교해야 함groupby()
시dropna=False
인자로 결측값 포함 가능
섹션별 세부 요약
1. 결측값 표현 방식 비교
- SAS:
- 수치형:
.
(점), 특수 결측값.A–.Z
- 문자형:
''
(빈 문자열) - 날짜/시간:
.
(수치형으로 저장) - Python(pandas):
- 수치형:
np.nan
,pd.NA
- 문자형:
None
,np.nan
,pd.NA
- 날짜/시간:
pd.NaT
- 불리언:
pd.NA
(nullable Boolean dtype)
2. 결측값 정렬 순서
- SAS:
._
(밑줄) <.
(점) <.A–.Z
(특수 결측값) < 음수 < 0 < 양수- pandas:
- 기본값으로 결측값이 마지막에 배치,
na_position='first'
인자로 순서 변경 가능
3. 결측값 검출 방법
- SAS:
missing(x)
(유니버설),x = .
(수치형),x = ''
(문자형)- pandas:
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('id')['value'].transform(lambda x: x.fillna('ffill'))
- 통계 기반 채우기: 평균, 중위수, 최빈값 사용 (
df['col'].fillna(df['col'].mean())
)
5. 실전 예제 및 주의사항
- SAS vs pandas 비교:
x < 0
조건에서 SAS는.
포함, pandas는NaN
제외NaN == NaN
은False
반환,pd.isna()
로 비교해야 함groupby()
시dropna=False
인자로 결측값 포함 가능
결론
- SAS와 pandas의 결측값 처리 차이를 이해하는 것이 실무에서의 오류를 줄이는 핵심
pd.isna()
사용,groupby()
시dropna=False
설정,NaN
비교 시pd.isna()
활용- 결측값 채우기 전략에 따라 데이터 분석의 정확도와 신뢰도가 달라지므로, 상황에 맞는 방법 선택이 중요하다.