Pandas Dataframe fillna() 특정 열만 채우기
해결 방법:
fillna()
메서드 사용:
df["특정 열"].fillna(값, inplace=True)
특정 열
: 채우고 싶은 열 이름값
: 결측값을 대체할 값 (숫자, 문자열, 다른 열의 평균 등)inplace=True
: 원본 데이터프레임을 수정 (기본값: False)
예시:
df = pd.DataFrame({"A": [1, 2, np.nan], "B": [3, np.nan, 5], "C": [6, 7, 8]})
# "A" 열의 결측값을 평균으로 채우기
df["A"].fillna(df["A"].mean(), inplace=True)
# 결과
# A B C
# 0 1.0 3 6
# 1 2.0 NaN 7
# 2 3.0 5 8
loc
속성 사용:
df.loc[조건, "특정 열"] = 값
조건
: 결측값을 채울 행을 선택하는 조건 (불리언 표현식)값
: 결측값을 대체할 값
df.loc[df["A"].isnull(), "A"] = df["A"].mean()
# 결과
# A B C
# 0 1.0 3 6
# 1 2.0 NaN 7
# 2 3.0 5 8
mask
속성 사용:
df["특정 열"].mask(조건, 값, inplace=True)
df["A"].mask(df["A"].isnull(), df["A"].mean(), inplace=True)
# 결과
# A B C
# 0 1.0 3 6
# 1 2.0 NaN 7
# 2 3.0 5 8
참고:
fillna()
메서드는 특정 열뿐만 아니라 모든 열에 적용할 수 있습니다.loc
속성과mask
속성은 특정 행뿐만 아니라 특정 열에도 적용할 수 있습니다.
예제 코드
import numpy as np
import pandas as pd
# 데이터 생성
df = pd.DataFrame({"A": [1, 2, np.nan], "B": [3, np.nan, 5], "C": [6, 7, 8]})
# 방법 1: fillna() 메서드 사용
# "A" 열의 결측값을 평균으로 채우기
df["A"].fillna(df["A"].mean(), inplace=True)
# 결과 확인
print(df)
# 방법 2: loc 속성 사용
# "B" 열의 결측값을 0으로 채우기
df.loc[df["B"].isnull(), "B"] = 0
# 결과 확인
print(df)
# 방법 3: mask 속성 사용
# "C" 열의 결측값을 이전 값으로 채우기
df["C"].mask(df["C"].isnull(), df["C"].shift(1), inplace=True)
# 결과 확인
print(df)
출력 결과:
A B C
0 1.0 3 6
1 2.0 0 7
2 3.0 5 8
A B C
0 1.0 3 6
1 2.0 0 7
2 3.0 5 8
A B C
0 1.0 3 6
1 2.0 0 7
2 3.0 5 7
설명:
- 방법 1은
fillna()
메서드를 사용하여 "A" 열의 결측값을 평균으로 채웁니다. - 방법 2는
loc
속성을 사용하여 "B" 열의 결측값을 0으로 채웁니다.
- 이 예시 코드는 Pandas 버전 1.4.2에서 테스트되었습니다.
- 다른 Pandas 버전에서는 코드가 다르게 작동할 수 있습니다.
Pandas Dataframe fillna() 특정 열만 채우기: 대체 방법
bfill 및 ffill 메서드:
bfill
: 이전 값으로 채우기
# "A" 열의 결측값을 이전 값으로 채우기
df["A"].bfill(inplace=True)
# "B" 열의 결측값을 다음 값으로 채우기
df["B"].ffill(inplace=True)
interpolate() 메서드:
- 선형 보간법을 사용하여 결측값 채우기
# "C" 열의 결측값을 선형 보간법으로 채우기
df["C"].interpolate(inplace=True)
사용자 정의 함수:
- 특정 조건에 따라 결측값을 채우기
def g(df):
for i in range(len(df)):
if df.loc[i, "A"] is np.nan:
df.loc[i, "A"] = df.loc[i-1, "A"]
df.apply(g, axis=1)
lambda 식:
- 간단한 사용자 정의 함수를 사용하여 결측값 채우기
df["A"].fillna(lambda x: x.bfill(), inplace=True)
- 각 방법은 장단점이 있습니다.
- 적절한 방법은 데이터의 특성과 상황에 따라 다릅니다.
python pandas dataframe