Pandas DataFrame에서 NaN 값을 열 평균으로 바꾸기
먼저, 작업에 필요한 pandas 라이브러리를 불러옵니다.
import pandas as pd
데이터 준비
다음은 NaN 값을 포함하는 예시 데이터입니다.
data = {'A': [1, 2, np.nan, 4, 5],
'B': [3, 4, np.nan, 6, 7],
'C': [np.nan, 6, 7, 8, 9]}
df = pd.DataFrame(data)
print(df)
A B C
0 1.0 3.0 NaN
1 2.0 4.0 NaN
2 NaN NaN 7.0
3 4.0 6.0 8.0
4 5.0 7.0 9.0
열 평균 계산
각 열의 평균값을 계산합니다.
mean_values = df.mean()
print(mean_values)
A 3.000000
B 5.000000
C 7.666667
dtype: float64
NaN 값을 열 평균으로 바꾸기
fillna()
함수를 사용하여 NaN 값을 열 평균으로 바꿀 수 있습니다.
df.fillna(mean_values, inplace=True)
print(df)
A B C
0 1.0 3.0 7.666667
1 2.0 4.0 7.666667
2 3.0 5.0 7.666667
3 4.0 6.0 8.000000
4 5.0 7.0 9.000000
설명:
df.mean()
: 각 열의 평균값을 계산합니다.fillna(mean_values, inplace=True)
:mean_values
를 사용하여 NaN 값을 채웁니다.inplace=True
: 변경 내용을 원본 DataFrame에 적용합니다.
추가 정보
- 특정 열만 평균값으로 채우고 싶은 경우,
fillna()
함수에axis
매개변수를 사용할 수 있습니다. 예를 들어, 'A' 열만 평균값으로 채우려면 다음과 같이 코드를 작성합니다:
df.fillna(mean_values, axis=0, inplace=True)
df.fillna(0, inplace=True)
주의:
mean()
함수는 기본적으로 NaN 값을 포함하여 평균을 계산합니다. 하지만, 원하는 경우skipna
매개변수를 사용하여 NaN 값을 제외하고 평균을 계산할 수 있습니다.
mean_values = df.mean(skipna=True)
예제 코드
import pandas as pd
import numpy as np
# 데이터 준비
data = {'A': [1, 2, np.nan, 4, 5],
'B': [3, 4, np.nan, 6, 7],
'C': [np.nan, 6, 7, 8, 9]}
df = pd.DataFrame(data)
print(df)
# 열 평균 계산
mean_values = df.mean()
print(mean_values)
# NaN 값을 열 평균으로 바꾸기
df.fillna(mean_values, inplace=True)
print(df)
Output:
A B C
0 1.0 3.0 NaN
1 2.0 4.0 NaN
2 NaN NaN 7.0
3 4.0 6.0 8.0
4 5.0 7.0 9.0
A 3.000000
B 5.000000
C 7.666667
dtype: float64
A B C
0 1.0 3.0 7.666667
1 2.0 4.0 7.666667
2 3.0 5.0 7.666667
3 4.0 6.0 8.000000
4 5.0 7.0 9.000000
- 이 코드는 앞서 설명한 내용을 바탕으로 작성되었습니다.
data
딕셔너리에 예시 데이터를 저장합니다.pd.DataFrame()
함수를 사용하여 딕셔너리를 DataFrame으로 변환합니다.df.fillna(mean_values, inplace=True)
함수를 사용하여 NaN 값을 열 평균값으로 바꿉니다.- 변경된 DataFrame을 출력합니다.
- 이 코드는 예시이며, 실제 상황에 따라 변경될 수 있습니다.
- 데이터 처리 과정에서 발생할 수 있는 오류를 방지하기 위해 데이터를 항상 주의 깊게 검토해야 합니다.
Pandas DataFrame에서 NaN 값을 열 평균으로 바꾸는 대체 방법
replace() 함수 사용
replace()
함수를 사용하여 NaN 값을 특정 값으로 바꿀 수 있습니다. 이 경우, 열 평균값을 특정 값으로 설정하면 됩니다.
df.replace(np.nan, df.mean(), inplace=True)
print(df)
interpolate() 함수 사용
interpolate()
함수를 사용하여 NaN 값을 보간할 수 있습니다. 이 함수는 인접한 값을 기반으로 NaN 값을 추정합니다. method='linear'
매개변수를 사용하면 선형 보간을 수행합니다.
df.interpolate(method='linear', inplace=True)
print(df)
apply() 함수 사용
apply()
함수를 사용하여 사용자 정의 함수를 각 열 또는 행에 적용할 수 있습니다. 다음은 각 열의 평균값을 계산하고 NaN 값을 해당 평균값으로 바꾸는 사용자 정의 함수의 예시입니다.
def impute_nan(column):
mean_value = column.mean()
column.fillna(mean_value, inplace=True)
return column
df.apply(impute_nan, axis=0, inplace=True)
print(df)
groupby() 함수 사용
groupby()
함수를 사용하여 그룹별로 데이터를 집계하고 NaN 값을 처리할 수 있습니다. 다음은 'A' 열을 기준으로 그룹화하고 각 그룹의 평균값으로 NaN 값을 채우는 예시입니다.
def impute_nan_by_group(group):
mean_value = group['B'].mean()
group['B'].fillna(mean_value, inplace=True)
return group
df.groupby('A').apply(impute_nan_by_group, inplace=True)
print(df)
주의 사항:
- 각 방법마다 장단점이 있으므로, 상황에 맞는 방법을 선택해야 합니다.
interpolate()
함수는 시계열 데이터에 유용하지만, 일반적인 데이터에는 적합하지 않을 수 있습니다.apply()
함수와groupby()
함수는 사용자 정의 로직을 구현하는 데 유연성을 제공하지만, 다른 방법들보다 느릴 수 있습니다.
python pandas nan