해결된 질문
작성
·
46
0
위 화면은 선생님이 풀이해주신거고
아래는 제가 작성한 코드입니다.
# your code
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p1/members.csv")
# print(df.isnull().sum())
# print(df.shape)
df=df.dropna(subset=['views'])
# print(df.shape)
df['f3']=df['f3'].map({'silver':1,'gold':2,'vip':3})
df['f3']=df['f3'].fillna(0)
int(sum(df['f3']))
결측치 처리를 할때
선생님은 numpy 라이브러리를 통해
replace(np.nan,0) 을 사용했습니다.
저는 아래와 같이 실버,골드,vip를 맵핑해준 후, 결측치를 0으로 처리했습니다.
df['f3']=df['f3'].map({'silver':1,'gold':2,'vip':3})
df['f3']=df['f3'].fillna(0)
질문1) 위와 같이 결측치 따로, 맵핑 따로 작성 해도 되나요? 총계합은 동일하게 나오면 상관없나요?
질문2) 위 코드에서 제가 처음에는 결측치를 먼저 처리하고 맵핑을 했더니, 맵핑한 이후에는 0으로 처리했던 결측치가 다시 NaN 이 되어서 작성 순서를 맵핑 후 결측치 처리로 변경했는데.. 왜 그런건가요? 순서에 따라 결과가 달랐습니다.
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. ejrwls10님이 작업형1 모의문제1에 대한 pandas의 결측치 및 데이터 매핑 처리에 대해 질문을 주셨네요.
질문 1) 결측치 처리와 매핑 처리의 순서
- 결측치 처리와 데이터 매핑을 따로 수행해도 문제없습니다. 중요한 점은 최종 계산 결과가 정확해야 한다는 점입니다. 즉, 예를 들어 데이터 프레임에서 ‘silver’, ‘gold’, ‘vip’ 문자열을 매핑하여 숫자로 변환한 후 결측치를 처리하는 단계에서 각 단계가 올바르게 작동하면서 전체적인 계산 결과에 영향을 미치지 않는다면, 작성 방법에 큰 문제는 없습니다.
질문 2) 코드 순서로 인한 NaN 값 재발생 이유
- 결측치를 먼저 0으로 처리한 후 매핑을 수행하면, 매핑 과정에서 ‘silver’, ‘gold’, ‘vip’ 만 숫자로 변환되기 때문에, 이미 0으로 채워진 결측치가 다시 NaN이 됩니다. 이는 map
함수가 지정된 키에 대한 값만 바꾸고 나머지 값들은 NaN으로 처리하기 때문입니다. 따라서, 매핑을 먼저 수행하여 기존 문자열을 숫자로 변환한 다음, 남은 결측치들을 fillna로 처리하는 것이 올바른 순서입니다.
관련 문제를 해결하는 데 도움이 될 만한 유사한 질문과 답변들도 있으니 참고하시기 바랍니다:
- 문제3 변환 관련 문의: 데이터 매핑 및 결측치 처리 관련된 유사한 이슈를 설명하고 있습니다.
- 작업형1 모의문제1의 문제3에 대해 여쭙습니다~: loc
메서드를 활용한 데이터 변환 접근 방법을 안내합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.