해결된 질문
작성
·
132
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
스케일링에서 입력은 "데이터 프레임"형태로 들어가야 합니다.
보통 데이터를 여러개의 컬럼을 넣다보니 아래와 같이 됩니다.
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 인턴입니다.
져니님께서 질문하신 “왜 fit_transform
메서드에 전달하는 데이터프레임 컬럼을 df[['f5']]
와 같이 대괄호를 두 번 사용하여 감싸는지”에 대한 궁금증은 많은 초보 데이터 사이언티스트들이 가지고 있는 흔한 질문 중 하나입니다. 대괄호를 두 번 사용하는 이유는 sklearn
의 fit_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차원 데이터를 요구하는 이유를 설명하고 있습니다. 관련 내용은 아래 링크에서 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.