본문 바로가기
반치용/기타 및 저장

[파이썬 머신러닝] day 003 - pandas 끝

by  반  2019. 12. 25.

groupby 함수 사용법

데이터 프레임명.groupby(분류를 나눌 열 이름)[연산을 할 열 이름].집계함수()
형태로 사용하는 것을 볼 수 있다.

연산할 열 별 집계내용이 다를 시  agg() 함수 안에 

{'열이름':'집계함수명,'열이름':'집계함수명' .... } 형태로 넣으면 열별로 별도의 집계가 가능하다.

 처음 파이썬으로 전처리 할 때, pandas를 몰라서 줄 단위로 불러들여서 구분기호로 split하고, 각각을 리스트에 넣어서 연산했었는데... 시간은 정말 많이 잡아먹고 오류는 많고 ㅜㅜ...

 이걸 좀 더 일찍 알았으면...


결측값 핸들링(결측값 제거, 수정 등)

데이터프레임.isna() 를 통해 결측값에 대한 행렬을 데이터 프레임 형태로 리턴 가능함

 

 

.sum() 을 이용해 각 항목(열)별로 몇 개의 결측값이 있는지 확인 가능하다.

결측값을 변경하기 위해 .fillna() 를 사용할 수 있다. 제거를 원한다면

 .fillna('') 

 라고 입력하면 된다.

titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())
titanic_df['Embarked'] = titanic_df['Embarked'].fillna('S')

결측값을 해당 항목(열)의 평균으로 넣는 코드와 특정 값'S'로 채워넣는 경우의 코드


lambda와 apply를 이용해 조건부로 열을 채워 넣는 방법이다.
조건에 따라 0,1을 구분해 넣을 때 많이 사용하는 코드이다.

titanic_df['Child_Adult'] = titanic_df['Age'].apply(lambda x : 'Child' if x <=15 else 'Adult')
titanic_df[['Age','Child_Adult']].head(10)

더 복잡한 조건에서는 별도로 함수를 선언하여 보기좋게 처리하는 방법도 있다.

def get_category(age):
    if 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

titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : get_category(x))
titanic_df[['Age','Age_cat']].head(10)

pandas도 일단락 되었다. 

기본적인 데이터 핸들링 기술을 익혔으며, 이 것이 전처리의 기본이 될 것이다.

댓글