해결된 질문
작성
·
43
·
수정됨
0
# your code
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p1/members.csv")
#1
#print(df.shape)
df = df.dropna(subset=['views'])
#print(df.shape)
#2
df['f3'] = df['f3'].fillna(0)
df['f3'] = df['f3'].replace('silver',1)
df['f3'] = df['f3'].replace('gold',2)
df['f3'] = df['f3'].replace('vip',3)
print(int(df['f3'].sum()))
이렇게 작성 후 실행하면 결과가 밑에 처럼 나옵니다.
133
<ipython-input-57-2ecc61ea0b50>:14: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`
df['f3'] = df['f3'].replace('vip',3)
문제 3번에서 두번째 점과 관련된 질문입니다.
강의에서 알려주신 넘파이를 꼭 사용해야 하나요?
이전 강의에서 넘파이에 대한 내용이 따로 언급이 없으셔서 혼자 문제 풀어볼 때 넘파이 사용하지 않고 풀어본 것인데.. 깔끔하게 133만 나오지 않아서요ㅜㅜ
답변 2
0
넘파이 사용하지 않아도 됩니다. 풀이하신 방식에 문제가 없어요!
replace 함수를 여러번 사용해서 발생한 문제인데 무시해도 무방합니다.
시험에서도 정답을 직업 입력하는 방식으로 진행되기 때문에 결과만 확인이 가능하면 됩니다.
또는 이렇게 풀 수 있어요 (워닝 없음)
# 2. 'f3' 컬럼의 결측치는 0으로 채움
df['f3'] = df['f3'].fillna(0)
# 3. 문자 값을 숫자로 변환 (map 사용)
map_dict = {'silver': 1, 'gold': 2, 'vip': 3}
mapped = df['f3'].map(map_dict)
0
안녕하세요, 인프런 AI 인턴입니다. simhoon1023님께서 작업형1 모의문제1의 문제3에서 replace
함수 사용과 관련된 질문을 주셨군요.
질문 주신 코드는 pandas
의 replace
메서드를 사용하여 f3
컬럼의 값을 변환하는 과정에서 발생하는 FutureWarning과 관련이 있습니다. 이 경고는 향후 pandas
의 버전이 업데이트될 때 해당 함수의 동작이 변경될 수 있음을 알려주는 것입니다. 현재로서는 기능적으로 문제를 일으키지 않으므로 무시하셔도 괜찮습니다. 하지만, futureWarning이 불편하실 경우, pandas의 다른 변환 방법을 고려할 수 있습니다.
numpy
없이도 동일한 변환 결과를 얻을 수 있으며, 다양한 방법으로 문제를 해결할 수 있습니다. 아래는 대안적인 방법들을 소개한 링크들입니다:
문제3 변환 관련 문의: replace
메서드를 여러 번 호출하는 대신 딕셔너리를 활용하여 한 번에 값을 변환하는 방법을 설명하고 있습니다.
작업형1 모의문제1의 문제3에 대해 여쭙습니다~: pandas
의 loc
메서드를 이용하여 변환하는 방법을 소개하고 있습니다.
이와 같은 방법들은 길고 복잡한 코드를 간소화하여 향후 유지보수에 도움이 될 수 있습니다. 해당 문제에서는 코드의 단순성보다 결과적으로 정확한 합계(133)를 출력하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 유사한 문제가 해결된 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.