인프런 커뮤니티 질문&답변

져니님의 프로필 이미지

작성한 질문수

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

너무 간단한건데 이해가 안됩니다 ㅠㅠ 정말 간단합니다.. 정규화

해결된 질문

24.05.28 16:34 작성

·

111

1

일단 이 문제는 캐글에서 선생님께서 생성해주신 문제구요.

T1-9 수치형 변수 표준화 문제입니다.

 

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df['f5']=scaler.fit_transform(df[['f5']])
df.head()

요렇게 해야 한다고 했는데요

 

저는 세번째 줄을

df['f5'] = scaler.fit_transform(df['f5'])

로 했는데 오류가 나서 잘 보니까, transform 뒤에 df[['f5']] 로 답이 작성되어 있더라고요

여기는 왜 []를 두번씩 감싸는 건가요????

 

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

2024. 05. 28. 20:28

스케일링에서 입력은 "데이터 프레임"형태로 들어가야 합니다.

보통 데이터를 여러개의 컬럼을 넣다보니 아래와 같이 됩니다.

cols = ['컬럼', '컬럼']

df[cols] = scaler.fit_transform(df[cols])

 

이를 한 줄로 표현하면 이와 같습니다.

df[ ['컬럼', '컬럼']] = scaler.fit_transform(df[ ['컬럼', '컬럼']])

 

한 개의 컬럼만 있으니

df[['컬럼']] = scaler.fit_transform(df[ ['컬럼']]) 이됩니다. -> 데이터프레임 유지

이렇게도 사용할 수 있어요

df['컬럼'] = scaler.fit_transform(df[ ['컬럼']]) 이됩니다. -> 시리즈로 받게 됨

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 28. 16:35

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

져니님께서 질문하신 “왜 fit_transform 메서드에 전달하는 데이터프레임 컬럼을 df[['f5']]와 같이 대괄호를 두 번 사용하여 감싸는지”에 대한 궁금증은 많은 초보 데이터 사이언티스트들이 가지고 있는 흔한 질문 중 하나입니다. 대괄호를 두 번 사용하는 이유는 sklearnfit_transform 메서드 등 대부분의 사이킷런 모델 메서드들이 데이터의 형태로 2차원 배열 또는 2차원 배열과 동일한 구조인 DataFrame을 기대하기 때문입니다.

df['f5']를 사용하면 Pandas 시리즈 객체가 반환되는데, 이는 1차원 데이터입니다. 반면 df[['f5']]f5 컬럼만을 포함하는 DataFrame을 반환하며, 이는 2차원 데이터 구조를 가집니다. StandardScaler와 같은 사이킷런 변환기(transformer)들은 입력 데이터로 2차원 구조를 필요로 하므로, df[['f5']]의 형태를 사용해야 합니다.

비슷한 질문으로, “캐글 T1-9 질문”에서 미미밍 님이 “÷f5’ 칼럼을 스케일링 할 때 왜 df[['f5']]와 같이 컬럼을 대괄호 두 개로 감싸야 하는지”에 대한 답변을 찾을 수 있습니다. 여기에서는 df['f5']가 시리즈를, df[['f5']]가 데이터프레임을 반환함으로써 스케일링시 2차원 데이터를 요구하는 이유를 설명하고 있습니다. 관련 내용은 아래 링크에서 확인하실 수 있습니다:

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

져니님의 프로필 이미지

작성한 질문수

질문하기