유방울 2023. 5. 16. 18:24

결측치 제거에 사용되는 메서드

df.dropna() 중에서

df.dropna(how='all', subset =['컬럼'..]) 모든 데이터가 결측치인 행 삭제 + 지정된 컬럼만 삭제 검색 대상

# [3-30] df_dust 에서 ['오존농도(ppm)','미세먼지(㎍/㎥)', '초미세먼지(㎍/㎥)']에서 
# 모든 데이터가 결측치인 행을 제거하여 결과를 temp1으로 저장합니다
temp1 = df_dust.dropna(how='all',subset=['오존농도(ppm)','미세먼지(㎍/㎥)', '초미세먼지(㎍/㎥)'])

# df_dust와 temp1의 행의 수 (len)을 확인하여 제거된 행의 개수를 확인합니다.
print(len(df_dust)-len(temp1))

df.dropna(how='all', subset =['컬럼'..]) 결측치가 하나라도 포함된 행 삭제

이를 temp2 저장

# [3-31] df_dust 에서 ['오존농도(ppm)','미세먼지(㎍/㎥)', '초미세먼지(㎍/㎥)']에서 
# 하나라도 결측치가 있는 행을 제거하여 결과를 temp2로 저장합니다.
temp2 = df_dust.dropna(how='any',subset=['오존농도(ppm)','미세먼지(㎍/㎥)', '초미세먼지(㎍/㎥)'])

# df_dust와 temp2의 행의 수 (len)을 확인하여 제거된 행의 개수를 확인합니다.
print(len(df_dust)-len(temp2))

df.dropna(thresh = 2, subset =['컬럼'..]) 2개 이상이 데이터를 가진 행은 삭제 안함

# [3-32] df_dust 에서 ['오존농도(ppm)','미세먼지(㎍/㎥)', '초미세먼지(㎍/㎥)']에서 
# 2개 이상의 데이터를 가진 행은 제거하지 않은 결과를 temp3로 저장합니다.
# (= 3개의 정보 중 1개의 데이터만 가진 행을 제거함)
temp3 = df_dust.dropna(thresh=2, subset=['오존농도(ppm)','미세먼지(㎍/㎥)', '초미세먼지(㎍/㎥)'])

# df_dust와 temp3의 행의 수 (len)을 확인하여 제거된 행의 개수를 확인합니다.
print(len(df_dust)-len(temp3))

히트맵으로 결측치 제거 확인

# [3-33] temp1, temp2, temp3의 '오존농도(ppm)':'초미세먼지(㎍/㎥)'에 대한 결측치 heatmap을 그려봅니다.
# temp1, temp3는 부분적으로 결측치가 남아있고, temp2는 결측치가 없습니다.
plt.figure(figsize=(7, 8))
sns.heatmap(temp2.loc[:, '오존농도(ppm)':'초미세먼지(㎍/㎥)'].isna(), cbar=False)
plt.show()

meandf 데이터프레임에 년, 월별 미세먼저 데이터 평균 저장

# [3-34] df_dust에서 '년', '월'별 '미세먼지(㎍/㎥)' 데이터의 평균을 구해
# DataFrame으로 만들어 meandf 라는 이름을 지정합니다.ㅣ
# 그룹 기준으로 여러개를 지정함 -> 멀티인덱스 만들어짐
meandf = df_dust.groupby(['년','월'])[['미세먼지(㎍/㎥)']].mean()
meandf

		미세먼지(㎍/㎥)
년	월	
2016	1	52.693844
2	48.283273
3	66.799503
4	73.327039
5	58.624172
6	47.872304
7	35.531092
8	37.124378
9	40.013841
10	40.191363
11	54.729965
12	50.693522
2017	1	55.719138
2	49.554029
3	64.532392
4	59.582549
5	66.029826
6	43.878112
7	36.667496
8	24.564570
9	36.624786
10	32.496689
11	45.322222
12	52.992327

meandf 데이터프레임을 2017,6 데이터만 출력 

# [3-35] meandf에서 2017년 6월까지의 데이터만 출력합니다.
meandf.loc[:(2017,6),:]

		미세먼지(㎍/㎥)
년	월	
2016	1	52.693844
2	48.283273
3	66.799503
4	73.327039
5	58.624172
6	47.872304
7	35.531092
8	37.124378
9	40.013841
10	40.191363
11	54.729965
12	50.693522
2017	1	55.719138
2	49.554029
3	64.532392
4	59.582549
5	66.029826
6	43.878112

결측치 제거 전 후 차이 비교 칼럼 추가

결측치제거 컬럼 추가 

차이 컬럼 추가

# [3-36] meandf에 '결측치제거후' 및 '차이'라는 컬럼을 추가합니다.
# '결측치제거후' 컬럼은 temp2에서 '년', '월'별 '미세먼지(㎍/㎥)' 데이터의 평균을 사용합니다.
# '차이' 컬럼은 '미세먼지(㎍/㎥)' - '결측치제거후' 를 사용합니다.

meandf['결측치제거후'] = temp2.groupby(['년', '월'])['미세먼지(㎍/㎥)'].mean()
meandf['차이'] = meandf['미세먼지(㎍/㎥)'] - meandf['결측치제거후']

2017년 6월까지 출력 (생략한 것임)

# [3-37] meandf에서 2017년 6월까지의 데이터만 출력합니다.
# 여러 개의 값에 차이가 있는 것을 확인 할 수 있습니다.
meandf.loc[:(2017,6),:]

	미세먼지(㎍/㎥)	결측치제거후	차이
년	월			
2016	1	52.693844	52.693844	0.000000
		2	48.283273	48.283273	0.000000
		3	66.799503	66.799503	0.000000
		4	73.327039	73.327039	0.000000
		5	58.624172	58.571784	0.052388
		6	47.872304	47.872304	0.000000