inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

7회 기출문제 작업형1번 df 변환 후 저장되는 방식 질문

해결된 질문

38

HOJUN CHOI

작성한 질문수 8

0

7회 기출문제 작업형 1을 풀다가 조건 cond를 설정해서 문제에서 정해준 조건에 만족하는 위치에 score 컬럼 값을 표준화해 저장하려 했습니다.

그래서 아래의 코드와 같이 df[cond1 & cond2]로 스케일링을 했는데 이후에 print(df)를 하면 score 컬럼의 값이 스케일링하기 전의 값들로 결과가 출력되는지 궁금합니다.

다른 문제들도 어떨때는 df = df.변환 하면 저장되어서 출력되고, 또 어떤 경우에는 안되고에 대한 기준을 모르겠습니다.


import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/7_1/student_assessment.csv")

# 결측치 제거
# print(df.head(5))
# print(df.info())
# print(df.isnull().sum())
df = df.dropna()
# print(df.isnull().sum())

# 가장 많은 학생이 수강한 과목 = 12
# print(df['id_assessment'].value_counts())
# print(df.head(5))

# 12 과목의 score 컬럼을 표준화 한 뒤에 표준화
from sklearn.preprocessing import StandardScaler
# print(dir(preprocessing))
scl = StandardScaler()
cond1 = df['id_assessment'] == 12
cond2 = df['score']

# 질문 부분 시작
print("스케일링 전: ",df[cond1 & cond2].describe())
df[cond1 & cond2] = scl.fit_transform(df[cond1 & cond2])
print("스케일링 후: ",df[cond1 & cond2].describe())
print(df)
# 질문 부분 마침

# print(df[cond1 & cond2].max())
# print(round(2.183422, 3))

# 답: 2.183

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

답변 2

0

퇴근후딴짓

cond1 = df['id_assessment'] == 12

는 참과 거짓이cond1에 저장되지만

cond2 = df['score'] 는 조건이 아니라 데이터 프레임이 저장됩니다.

따라서 df[cond1 & cond2]는 불가 합니다.

0

인프런 AI 인턴

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

질문해 주신 부분에 대해 설명드리겠습니다. 데이터프레임 df에서 특정 조건에 맞는 부분을 인덱싱하여 치환하려고 할 때, pandas의 기본적인 동작방식으로 인해 변경이 바로 적용되지 않는 경우가 있을 수 있습니다.

이유와 이해

df[cond1 & cond2]로 가져온 부분은 뷰(View)라고 볼 수 있는데, 이는 기존 DataFrame의 데이터를 복사하여 새로운 데이터프레임을 생성하는 것이 아닌 해당 부분만을 참고하는 일종의 ‘뷰’를 만듭니다. 따라서 직접적으로 이러한 인덱싱을 통해 DataFrame의 일부를 변경하면 전체 DataFrame에 적용되기 힘든 경우가 발생할 수 있습니다.

해결책

  • loc를 사용: pandas에서 인덱싱 연산 후에 값의 할당을 직접적으로 하려면 loc를 사용하는 것이 권장됩니다. 예를 들어, df.loc[cond1 & cond2, '열이름'] = 값 형태로 사용합니다.
  • Copy와 DataFrame 특성: Indexing으로 먼저 유사한 DataFrame을 만드는 경우에는 이 데이터에서 변환을 완료한 뒤 원래의 DataFrame에 덮어씌우는 형태로 조작할 수 있습니다.
import pandas as pd
from sklearn.preprocessing import StandardScaler

df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/7_1/student_assessment.csv")
df = df.dropna()

scl = StandardScaler()
cond1 = df['id_assessment'] == 12

# loc를 사용한 방식
df.loc[cond1, 'score'] = scl.fit_transform(df.loc[cond1, ['score']])

print("스케일링 후: ", df[cond1].describe())
print(df)

이렇게 하는 경우, df의 설정된 조건에 대한 score 값이 올바르게 변환되어 반영될 수 있습니다.

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

강의 업데이트

0

3

1

수강 연장 문의드립니다.

0

34

2

강의 연장 문의

0

37

2

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

0

49

2

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

0

32

2

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

0

42

2

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

0

40

2

수강기간 연장 문의

0

42

2

수강기간 연장문의

0

37

2

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

0

38

2

수강 기간 연장 문의

0

47

2

수강연장 가능 문의 (기간 약 한달반)

0

60

2

수강기간 연장 가능할까요 선생님

0

74

2

Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.

0

56

3

수강연장요청 문의

0

94

2

아무래도 다음 시험 연장은 어렵겠죠?

0

112

2

빅분기 12회 결과 관련 문의

0

115

1

책이랑 강의랑 순서나 예제가 다른것 같네요

0

84

2

수강연장 문의

0

107

2

재검토 요청 방법 좀 알려주셔요...-.-;;

0

109

2

12회 실기 질문(작업형 2)

0

95

2

뒤로가기 버튼 같은 것이 있나요?

0

68

1

강의 연장 문의

0

101

2

출력값 질문

0

75

2