• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

강의 중 에러 질문

23.11.06 22:18 작성 조회수 186

0

다르게 적용해보는 Feature Engineering1

5:50

df_all['Age'] = df_all.groupby(['Title', 'Pclass'])['Age'].apply(lambda x: x.fillna(x.median()))

에서 아래와 같은 에러가 뜹니다.

  11613         if not value.index.is_unique:
  11614             # duplicate axis
  11615             raise err
  11616 
> 11617         raise TypeError(
  11618             "incompatible index of inserted column with frame index"
  11619         ) from err
  11620     return reindexed_value

TypeError: incompatible index of inserted column with frame index

이전 챕터에서

df_all["Age"].fillna(df_all.groupby(['Title', 'Pclass'])["Age"].transform("median"), inplace=True)

위와 같은 진행했었던 기억이 있는데 비슷한 맥락이 맞나요?

아직 모르는게 많아서 강의자료에서 에러가 뜨면 턱턱 막히네요.... 😢

 

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변 도우미입니다.

우선 전체 강의자료는 그대로만 순차적으로 실행하시면 에러가 뜨지 않거든요. 아마 중간에 실행 순서를 달리 하셨거나, 임의 코드를 넣어서 실행을 하시면서 에러가 나신 것으로 이해가 됩니다. 그렇다면, 아예 새로 강의 자료를 다운받으셔서 영상과 함께 테스트해보시면 에러도 나지 않고, 당황하지 않으실꺼예요~~

위 문의와 관련해서 보다 상세히 설명드리면, 맞습니다. 두 코드 조각은 모두 Age 컬럼에 있는 결측치를 TitlePclass를 기준으로 그룹화한 후, 해당 그룹의 Age 컬럼의 중앙값으로 채우는 방법을 시도하고 있어요.

첫 번째 코드는 groupbyapply를 사용하는데, 이 때 apply 함수 내에서 사용된 lambda 함수를 통해 각 그룹에 대해 fillna를 호출하고 있습니다. x는 각 그룹의 Age 컬럼을 나타내며, x.median()은 그 그룹의 중앙값을 계산합니다.

df_all['Age'] = df_all.groupby(['Title', 'Pclass'])['Age'].apply(lambda x: x.fillna(x.median()))

 

두 번째 코드는 fillna를 직접 호출하지 않고, groupbytransform을 통해 같은 작업을 수행하는 코드입니다. transform("median")은 각 그룹의 중앙값을 계산하고, 이를 fillna의 인자로 넘겨줍니다. inplace=True 파라미터는 df_allAge 컬럼을 직접 수정합니다.

df_all["Age"].fillna(df_all.groupby(['Title', 'Pclass'])["Age"].transform("median"), inplace=True)

 

에러 메시지 TypeError: incompatible index of inserted column with frame index는 첫 번째 코드에서 df_all['Age']에 새로운 값들을 할당하려 할 때, 반환된 시리즈의 인덱스와 df_all의 인덱스가 일치하지 않을 때 발생합니다. 이는 apply 함수가 반환한 결과가 원래 데이터프레임과 다른 인덱스를 가지고 있을 때 발생할 수 있습니다.

이 문제를 해결하기 위해 두 번째 코드처럼 transform을 사용하는 것이 더 안정적인 방법일 수 있습니다. transform은 원본 데이터프레임의 인덱스를 유지한 채로 결과를 반환하므로 이런 종류의 인덱스 불일치 문제가 발생하지 않습니다.

판다스의 이런 작동 방식은 처음 접할 때 다소 혼란스러울 수 있으나, 각 함수가 어떤 결과를 반환하는지, 그리고 인덱스가 어떻게 유지되는지를 이해하면 훨씬 수월해집니다. 데이터 분석에서는 이런 세부적인 부분에 대한 이해가 중요하므로, 실습을 통해 차근차근 익혀가시길 권합니다.

감사합니다.