인프런 커뮤니티 질문&답변
'<=' not supported between instances of 'method' and 'int' 에러가 발생합니다.
해결된 질문
작성
·
1.3K
0
선생님 안녕하세요.
머신러닝 강의 정말 잘 듣고 있습니다.
다만 에러 메세지와 관련하여 질문이 생겨서 글을 남깁니다.
'<=' not supported between instances of 'method' and 'int' 이 에러가 발생하는데,
'Age' 값을 비교하여 'Age_cat'을 저장하는 lambda 구문에서 type이 일치하지 않아 에러가 발생하는 것 같습니다.
선생님께서 주신 코드와 강의를 pycharm 개발환경에서 함께 적으면서 똑같이 따라가는 중인데 이 점에서 에러가 발생합니다. 혹시 제가 잘못 이해한게 있을까요?
코드는 아래와 같습니다.
'''
1. Null 처리
2. 불필요속성 제거
3. 레이블 인코딩 수행
4. 결정트리, 랜덤포레스트, 로지스틱 회귀 학습 비교
5. KFold 교차 검증
6. cross_val_score(), GridSearchCV() 수행
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
titanic_df = pd.read_csv('titanic_train.csv')
print(titanic_df.head(3))
'''
Passengerid: 탑승자 아이디
survived: 생존여부, 0: 사망, 1: 생존
Pclass: 티켓 선실 등급, 1: 일등석, 2: 이등석, 3: 삼등석
sex: 탑승자 성별
name: 탑승자 이름
Age: 탑승자 나이
sibsp: 같이 탑승한 형제자매 또는 배우자 인원 수
parch: 같이 탑승한 부모님 또는 어린이 인원수
ticket: 티켓번호
fare: 지불 운임
cabin: 선실번호
embarked: 중간 정착 항구 C: Cherbourg, Q: Queenstown, S: Southampton
'''
print('\n ###타이타닉 데이터 정보###\n')
print(titanic_df.info()) #Age, Cabin, embarked의 특정 row에 NULL값이 포함된다.
titanic_df['Age'].fillna(titanic_df['Age'].mean, inplace=True)
titanic_df['Cabin'].fillna('N', inplace = True)
titanic_df['Embarked'].fillna('N', inplace=True)
print('데이터 세트 NULL 개수: ', titanic_df.isnull().sum().sum())
print('칼럼 별 데이터 세트 NULL 개수:\n', titanic_df.isnull().sum())
#각 object(not number)칼럼별 분포 확인
print(' Sex 값 분포:\n', titanic_df['Sex'].value_counts())
print('\n Cabin값 분포: \n', titanic_df['Cabin'].value_counts())
print('\n Embarked값 분포: \n', titanic_df['Embarked'].value_counts())
#cabin(선실번호)의 첫 알파벳만 tokenize해 titanic_df['Cabin']에 저장
titanic_df['Cabin'] = titanic_df['Cabin'].str[:1]
print(titanic_df['Cabin'].head(3))
print(type(titanic_df['Cabin']))
print(titanic_df['Cabin'].value_counts())
# Survived와 Sex로 groupby한 후 'Survived' 칼럼 count만 출력.
print(titanic_df.groupby(['Survived','Sex'])['Survived'].count())
# 막대 분포 찍기 (->여성 생존자가 더 많음)
sns.barplot(x='Sex', y='Survived', data=titanic_df)
sns.barplot(x='Pclass', y='Survived', hue='Sex', data=titanic_df)
# age에 따라 구분 값을 반환하는 함수 설정(DataFrame의 람다식에 사용)
def get_category(age):
cat = ''
if age <= -1:
cat = 'Unknown'
elif age <= 5:
cat = 'Baby'
elif age <= 12:
cat = 'Child'
elif age <= 18:
cat = 'Teenager'
elif age <= 25:
cat = 'Student'
elif age <= 35:
cat = 'Young Adult'
elif age <= 60:
cat = 'Adult'
else:
cat = 'Elderly'
return cat
# 막대그래프의 크기 figure를 더 크게 설정
plt.figure(figsize=(10, 6))
# X축의 값을 순차적으로 표시하기 위한 설정
group_names = ['Unknown', 'Baby', 'Child', 'Teenager', 'Student',
'Young Adult', 'Adult', 'Elderly']
# get_category(X)는 입력값으로 'Age' 컬럼값을 받아서 해당하는 Age_cat 반환
titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : get_category(x))
답변 1
1
안녕하십니까,
titanic_df['Age'].fillna(titanic_df['Age'].mean, inplace=True) 에서 titanic_df['Age'].mean() 로 적용 부탁드립니다. mean()함수가 호출되지 않고 mean 객체로 할당이 되어서 Age 컬럼이 object로 타입이 변경되어 발생하는 에러 입니다.
감사합니다.





