티스토리 뷰

안녕하세요! 이번에는 데이터프레임에서 결측치 처리에 대한 코드를 작성해보겠습니다.

데이터 분석 작업을 하다보면, 데이터가 누락되거나(null 또는 NaN 값으로 표시되는) 결측치가 발생하는 경우가 있습니다. 이러한 결측치를 처리하기 위해서 pandas에서는 dropna()와 fillna()라는 함수를 제공합니다.

먼저 샘플 데이터를 만들어 봅니다. 

data = {'name': ['Jason', 'Molly', np.nan, 'Jake', 'Amy'], 
        'year': [2012, 2012, 2013, 2014, 2014], 
        'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
df.dropna() # nan이 하나라도 들어간 행은 삭제
df.dropna(how='all') # 데이터가 모두 nan인 행만 삭제 / 초기값:'any'

먼저, dropna() 함수는 데이터프레임에서 결측치가 있는 행을 제거합니다. how 매개변수를 통해 제거 조건을 설정할 수 있습니다. how='all'로 설정하면, 해당 행의 모든 값이 결측치인 경우에만 제거됩니다. 기본값은 how='any'로 설정되어 있습니다.

df.fillna(0) # na를 0으로 채우기

new_data = {'a':0, 'b':1, 'c':-999}
df.fillna(new_data) # na 발생 시 a 열에는 0, b 열에는 1, c 열에는 -999로 채움
df.fillna(new_data, limit=2) # 각 열별로 2개의 nan까지 대체

두 번째로, fillna() 함수는 결측치를 대체합니다. fillna(0)과 같이 값을 지정하면, 결측치를 모두 0으로 대체합니다. fillna() 함수는 또한 딕셔너리 형태로 값을 전달하여 각 열별로 다른 값을 대체할 수도 있습니다. limit 매개변수를 통해 각 열별로 대체할 결측치의 최대 개수를 설정할 수 있습니다.

df.fillna(method='ffill') # 열별로 바로 앞의 데이터로 채움
df.fillna(method='bfill') # 열별로 바로 뒤의 데이터로 채움

세 번째로, fillna() 함수에서는 method 매개변수를 통해 앞의 값(forward fill) 또는 뒤의 값(backward fill)으로 결측치를 대체할 수 있습니다. 이를 통해 연속된 값들의 패턴을 유지할 수 있습니다.

df.loc[19,'Leaflets'] = df['Leaflets'].mean() # 평균값으로 
df.loc[19,'Leaflets'] = df['Leaflets'].median # 중앙값으로

 

마지막으로, fillna() 함수를 이용하여 평균값이나 중앙값 등으로 대체할 수도 있습니다. 

어떤 경우에는, 특정 값으로 결측치를 대체하는 것이 적절하지 않을 수도 있습니다. 이때는 평균값이나 중앙값 등으로 대체하는 것이 더 적절합니다. loc 메서드를 사용하여 해당 위치에 값을 지정하면 됩니다.

이렇게 결측치를 처리하는 방법에는 여러 가지가 있습니다. 데이터의 특성과 분석 목적에 따라서 적절한 방법을 선택해야 합니다. 이를 통해 정확한 분석 결과를 얻을 수 있습니다.

 

728x90
반응형
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
공지사항