inflearn logo
강의

Course

Instructor

[Side Project After Work] Big Data Analysis Certification Practical Exam (Type 1, 2, 3)

7th Session Past Exam Type (Task Type 1)

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

3

HOJUN CHOI

8 asked

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 빅데이터분석기사

Answer 1

0

communityai8509

안녕하세요, 인프런 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 값이 올바르게 변환되어 반영될 수 있습니다.

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

3 유형 귀무가설, 대립가설

0

9

2

인코딩 관련 질문 있습니다

0

11

2

작업형3 이원분산분석 sm에서불러오기 / anova_lm 차이

0

8

2

2유형 원핫인코딩 오류

0

15

2

시험장에서 주석 단축키 안될 때 많나요?

0

22

2

라벨인코딩 방식

0

19

2

test 재학습 관련

0

13

2

target 빈도 확인

0

15

2

작업형 2 연습문제 섹션 6

0

17

2

F1-score

0

17

2

작업형 2번 섹션 3

0

15

2

작업형 2 인코딩, 결측치, 모델 선택 질문

0

19

1

인코딩 방식 문의

0

24

2

9회 3유형 ==> 7회 3유형 질문드려요

0

15

2

작업형 2관련 질문입니다

0

13

2

작업형2 카테고리

0

24

2

110강 회귀_8번 문의

0

15

2

XGBRegressor 학습 시 warning 출력

0

21

2

데이터 프레임을 변경해도 되나요?

0

13

2

10회 기출 작업형3 문제 2-1 질문

0

22

2

작업형 2 질문

0

24

2

작업형 2 템플릿 확인 요청

0

24

2

작업형2 인코딩 질문

0

26

2

작업형 3 벼락치기 공부방법 질문

0

36

2