해결된 질문
작성
·
230
1
안녕하세요 수강생입니다.
강의듣다가 질문이 있어 이렇게 글남깁니다.
섹션4 - 모의고사1 - 3번 문제의 replace를 활용하거나 map을 활용하는 부분입니다.
저는 .replace.replace.replace를 반복하지 않고 아래와 같이 곧바로 딕셔너리 형태로 코드를 치니 마치 map에 딕셔너리를 리스트로 담은 것처럼 동작을 하던데 올바른 방법인지 모르겠습니다.
막상 답이 133으로 동일하게 나오다보니 replace나 map의 차이점 또는 딕셔너리의 올바른 활용(?) 부분이 궁금해지네요.
import pandas as pd
df = pd.read_csv('members.csv')
df = df.dropna(subset=['views'])
# print(df.isnull().sum())
df['f3'] = df['f3'].fillna(0)
df['f3'] = df['f3'].replace({'silver':1, 'gold':2, 'vip':3})
# print(df.head())
print(int(df['f3'].sum()))
답변 1
1
네, replace와 딕셔너리를 정확하게 사용해주셨습니다. 👍👍👍
replace를 여러 번 사용하는 것은 비효율적인 방법이고, 자주 사용하는 방법은 아닙니다!
수험생(입문자)에게는 구현하는 것이 목적이라 효율보다는 단순함을 목표로 했어요!
replace나 map의 차이점
replace는 단순 문자열의 변환이에요. 문의 주신 것처럼 딕셔너리를 활용할 수도 있습니다.
map은 단순히 값을 변환한다기 보다 다양한 함수를 사용할 수 있어 더 범용적으로 활용할 수 있다는 장점이 있답니다.
딕셔너리
리스트 처럼 여러개의 값을 담은 자료형(type)입니다. 데이터를 담는 변수이고, 어떤 곳에든 활용 가능해요 :)
빅데이터 분석기사에서는 주로 작업형2 마지막부분에서 예측값을 데이터 프레임으로 변경할 때 주로 사용하고 있어요!
변수명 때문에 오해가 있었던 것 같아요!
네, 질문 주신 분의 말이 맞습니다! m2003에 새로 담는 것이 깔끔할 것 같아요!
아래와 같이 수정했습니다. 👍
하지만 정답은 같습니다. 🙌
이미 r1을 구한 다음 m2001 변수에 덮어쓰기(m2001 = df.loc[2003].mean())를 한 경우라서 r1과 r2의 값에는 영향이 없습니다.
df = pd.read_csv("data.csv", index_col="Unnamed: 0")
# print(df.head(2))
m2001 = df.loc[2001].mean()
# print(m2001)
cond = df.loc[2001] > m2001
r1 = sum(cond)
m2003 = df.loc[2003].mean()
cond = df.loc[2003] < m2003
r2 = sum(cond)
print(r1+r2)
안녕하세요, 이어서 섹션4- 모의고사1 - 7번 문제 질문이 있습니다.
아래와 같이 풀이해주셨는데요.
index '2001' 데이터(행)의 평균보다 큰 값의 수와
index '2003' 데이터(행)의 평균보다 작은 값의 수를 더하시오
여기서 m2001 = df.loc[2003].mean() 부분의 변수는 m2001이 아니라 m2003으로 새로 담고 cond = df.loc[2003] < m2003 으로 비교해야 하지 않을까요?
문제가 정확히 이해가 가지 않아 답변주시면 감사하겠습니다~ ㅠㅠ