• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

연습문제 #9 - 타이타닉 승객 나이 결측치 채우기 (해설) 강의 질문

22.09.22 11:57 작성 조회수 215

0

안녕하세요 선생님. 연습문제 관련 질문이 있어 글을 올립니다.

강의에서 결측치 부분을 채워준 것을 데이터프레임에도 적용을 하려면 = 을 붙여주셔야 된다고 하신 것 같아요.

코드로 말씀드리면,

df1.loc[df1["sex"] == "male", "age"] = df1.loc[df1["sex"] == "male", "age"].fillna(male_mean)

이렇게요.

그런데 제가 주워듣기로는 fillna()안에 inplace=True 를 쓰면 앞에 df1.loc[df1["sex"] == "male", "age"] = 이 코드를 쓰지 않고도 데이터프레임에 적용이 된다고 들었습니다.

그런데 막상해보니 적용이 안되더라고요.

혹시 inplace에 관하여 조금 설명을 해주실 수 있을까요?

감사합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요?

답변 드리겠습니다.

inplace=True 라는 옵션은 원본에 반영해 주는 옵션이 맞습니다.

다만, loc로 조건 필터링에 대한 결과 값에 대하여 fillna(값, inplace=True)로 지정하면 질문 주신 내용처럼 채워지지 않습니다.

이유는 loc로 필터링한 결과값이 복사본이 먼저 만들어 지고 만들어진 복사본에 대하여 fillna(값, inplace=True)를 적용 했기 때문에 원본에는 반영이 안됩니다.

따라서, loc로 연계한 fillna()는 제대로 반영이 어렵기 때문에 재대입 방식을 권장 드리고 있습니다.

추가로, 파이썬 커뮤니티에서도 위와 같은 현상 때문에 재대입 하는 방식을 권장하고 있습니다.

 

감사합니다.