inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

2회 기출유형(작업형1)

2회 기출유형(작업형1) Warning

2

도비

작성한 질문수 3

0

먼저 유사한 질문이 있었는지 검색해보세요

안녕하세요!

아래 코드처럼 views컬럼의 상위 10개 값을 수정하는 코드에서 정답은 정상적으로 출력되는데, SettingWithCopyWarning과 FutureWarning이 발생합니다.

코드)

# 'views'컬럼 상위 10개 데이터를 ref로 대체
df['views'].iloc[:10] = ref

경고 내용)

/tmp/ipykernel_1503/1370443628.py:14: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!
You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.
A typical example is when you are setting values in a column of a DataFrame, like:

df["col"][row_indexer] = value

Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

  df['views'].iloc[:10] = ref
/tmp/ipykernel_1503/1370443628.py:14: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  df['views'].iloc[:10] = ref

현재는 정상적으로 값이 변경되고 정답도 일치하는 상황입니다.

이와 관련하여 두 가지 질문이 있습니다.

  1. 현재 코드에서 경고가 발생하는 정확한 이유와 권장되는 수정 방법이 궁금합니다.

  1. 빅데이터분석기사 실기 시험환경에서 해당 코드가 정상적으로 실행되는지 궁금합니다.


참고) 제가 작성한 전체 코드입니다.

# your code
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p1/members.csv")


# 'views'컬럼 기준으로 내림차순 정렬
df = df.sort_values('views', ascending=False)

# 'views'컬럼 상위 10번째 값
ref = df['views'].iloc[9]

# 'views'컬럼 상위 10개 데이터를 ref로 대체
df['views'].iloc[:10] = ref

# 'age'컬럼에서 80 이상인데이터만 추출
cond = df['age'] >= 80
df = df[cond]

# 그 데이터의 'views'컬럼 평균값 산정
print(df['views'].mean())

감사합니다 !

python 머신러닝 빅데이터 pandas 빅데이터분석기사

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 도비님.

df['views'].iloc[:10] = ref에서 발생하는 SettingWithCopyWarning은 체인 인덱싱으로 인해 원본 데이터프레임이 확실히 수정되는지 판다스가 보장하기 어렵기 때문에 발생합니다. FutureWarning은 이러한 동작이 향후 판다스 버전에서 변경될 수 있음을 알리는 경고입니다.

권장되는 방식은 .loc를 사용해 수정 대상을 명확히 지정하는 것입니다.

df.loc[df.index[:10], 'views'] = ref

또는 정렬 직후 인덱스를 초기화한 경우에는 다음처럼 작성할 수 있습니다.

df = df.sort_values('views', ascending=False).reset_index(drop=True)
ref = df.loc[9, 'views']
df.loc[:9, 'views'] = ref

현재 코드에서 정답이 정상적으로 출력되더라도, 시험 환경이나 판다스 버전에 따라 동작이 달라질 수 있으므로 .loc 사용을 권장합니다.

관련된 기존 답변은 다음 게시글을 참고해 주세요.

  • 문제1번 질문입니다
    정렬한 결과를 저장하지 않으면 원본 df에는 정렬이 반영되지 않는 문제와, 상위 10개 값을 수정하는 방법을 설명하고 있습니다.

  • 기출2 작업형 1
    시험에서는 최종 결과를 직접 입력하며, 데이터 불러오기 코드는 시험 환경에서 제공되는 경우가 많다는 안내가 포함되어 있습니다.

핵심적으로는 sort_values()의 결과를 df에 저장하고, 값 변경 시 df.loc[...]을 사용하면 경고를 피하면서 안정적으로 처리할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

describe()

0

27

2

수강기간 연장 문의

0

42

2

빅데이터분석기사 실기 인코딩

0

47

2

수강기간 연장문의

0

56

2

수강 기간 연장 문의 드립니다.. 부탁드립니다 ㅠㅠ

0

48

2

작업형2와 3의 목적

0

39

1

기출9회(작업형 1의 2번문제)

0

37

2

수강 기간 연장 문의 드립니다.

0

54

2

수강 연장 문의드립니다

0

64

2

수강 연장 문의드립니다.

0

51

2

재결제 가능할까요...

0

59

1

비전공자 빅분기 실기 공부방법

1

68

2

강의일시정지 요청합니다

0

60

2

강의 연장 가능할까요 ㅠㅠ

0

58

2

수강 연장 문의드립니다.

0

63

2

수강기간 연장 가능 여부 문의드립니다.

0

82

1

수강 기간 연장 가능 여부 문의드립니다

0

84

2

강의 업데이트

0

78

2

수강 연장 문의드립니다.

0

100

2

강의 연장 문의

0

73

2

수강 신청 연장 문의드립니다.

0

87

2

작업형 1번문제... 환경관련

0

67

2

12회 기출은 언제 업데이트 될까요??

1

88

2

8/6 작성한 연장문의 질문글에 대한 재요청

0

66

2