인프런 커뮤니티 질문&답변

blair님의 프로필 이미지
blair

작성한 질문수

한 방에 끝! 빅데이터분석기사 실기 작업형

기출 문제 풀이 질문

해결된 질문

작성

·

205

0

안녕하세요! 샘 덕분에 좋은 강의 잘 들었습니다.

python 초보로서 기출문제 풀이 중에 궁금한 점이 있어 문의 드립니다.

기출문제 2회차 > 작업1유형 > #1번 풀이를 다르게 풀어보고싶어서 연습을 하는데요

아래와 같이 코딩하면 정답이 다르게 나오는데, 무엇이 잘못된건지 알고싶습니다!

감사합니다 :)

 

############################################################

import pandas as pd

df = pd.read_csv("https://raw.githubusercontent.com/leadbreak/inflearn_lecture/main/datasets/%EA%B8%B0%EC%B6%9C02/1_1.csv")

#최소값

min = df['CRIM'].sort_values(ascending=False)[:50].min()

#최소값으로 대체 <---이 부분이 최소값으로 대체가 안되는 것 같습니다ㅠㅠ

df['CRIM'].sort_values(ascending=False)[:50] = min

#평균 : 7.900414294117647 (정답 : 5.009114294117647 과 다름)

print( df[df['AGE'] >= 90]['CRIM'].mean() )

답변 1

1

DQ K님의 프로필 이미지
DQ K
지식공유자

안녕하세요, blair님!
질문주셔서 감사합니다.

우선 해당 부분은 조금 깊은 내용일 수 있는데요, 간단히 말씀드리면
pandas 라이브러리의 내부 매서드(groupby, sort_values 등)를 통해 출력되는 결과물은 원본에 영향을 주지 않는 새로운 결과물이기에 그렇습니다. 때문에 해당 결과물을 보여주기만 할뿐, 원본 데이터와는 독립적인 별개의 것입니다.

때문에 이러한 기능을 사용한 데이터를 그대로 사용하고 싶다면 해당 메서드를 사용한 값을 변수명으로 지정해 사용하거나, 내부 파라미터 중 inplace=True를 이용해 원본 데이터까지 수정해야 합니다.

그로 인해 해답 코드로 제시한 과정에서는 df2에 새로운 정렬기준을 적용한 데이터프레임을 지정한 후, 이를 이용해 진행한 것입니다.
만일 새로운 데이터로 지정하지 않고 사용하고 싶으시다면 다음과 같이 사용할 수도 있습니다.

df = pd.read_csv("https://raw.githubusercontent.com/leadbreak/inflearn_lecture/main/datasets/%EA%B8%B0%EC%B6%9C02/1_1.csv")
df.sort_values(by=['CRIM'], ascending=False, inplace=True, ignore_index=True)
df['CRIM'][:50] = min(df['CRIM'][:50])

print(df[df['AGE'] >= 90 ]['CRIM'].mean())

 

또한 추가적으로 최소값으로 대체하는 과정에서 해당 값을 min으로 지정하셨는데요.
이는 직관성의 측면에선 아주 훌륭할 수 있지만 동일한 이름의 메서드가 다수 존재하며,
이를 변수명으로 지정했을 때 이후 다른 작업 과정에서 해당 메서드가 정상적으로 작동하지 않을 수도 있습니다. 이러한 문제는 추후 실무에서 모델링을 하거나, 취업을 위한 코딩테스트에서도 빈번하게 발생하는 실수이기에 주의가 필요하다는 것 말씀드리며 답변 마치겠습니다.

감사합니다.

blair님의 프로필 이미지
blair

작성한 질문수

질문하기