Python

Pandas 개념

patrck_jjh 2021. 6. 27. 16:53

Pandas

 

머신러닝 실습의 대표적인 예제인 타이타닉 데이터를 활용하여 pandas의 활용에 대해 정리하고자 한다.

 

 

 


# 데이터 불러오기

import pandas as pd

titanic_df = pd.read_csv('./data/train.csv')
print('titanic 변수 type:',type(titanic_df))
titanic_df

 

 

데이터 개요 확인

# 데이터 개요 확인

titanic_df.head()
print('DataFrame 크기: ', titanic_df.shape)
titanic_df.info()
titanic_df.describe()

 

 

범주형 데이터 개수 출력

# value_counts: 범주형 데이터의 개수 출력 

value_counts = titanic_df['Pclass'].value_counts()
print(value_counts)

 

 

 

 

파생변수 생성

titanic_df['Age_by_10'] = titanic_df['Age']*10
titanic_df['Family_No'] = titanic_df['SibSp'] + titanic_df['Parch']+1
titanic_df.head(3)

 

 

 

특정 행, 열 drop

# drop

titanic_drop_df = titanic_df.drop('Age_0', axis=1 )
titanic_drop_df.head(3)

 

 

 

 

 

index객체

# 원본 파일 재 로딩 
titanic_df = pd.read_csv('./data/train.csv')
# Index 객체 추출
indexes = titanic_df.index
print(indexes)
# Index 객체를 실제 값 arrray로 변환 
print('Index 객체 array값:\n',indexes.values)

 

 

 

 

print('단일 컬럼 데이터 추출:\n', titanic_df[ 'Pclass' ].head(3))
print('\n여러 컬럼들의 데이터 추출:\n', titanic_df[ ['Survived', 'Pclass'] ].head(3))

 

 

 

 

 

# 조건부 boolean indexing

titanic_df = pd.read_csv('./data/train.csv')

titanic_df[ titanic_df['Pclass'] == 3].head(3)

titanic_boolean = titanic_df[titanic_df['Age'] > 60]
print(type(titanic_boolean))
titanic_boolean

titanic_df[titanic_df['Age'] > 60][['Name','Age']].head(3)
titanic_df.loc[titanic_df['Age'] > 60, ['Name','Age']].head(3)
titanic_df[ (titanic_df['Age'] > 60) & (titanic_df['Pclass']==1) & (titanic_df['Sex']=='female')]

cond1 = titanic_df['Age'] > 60
cond2 = titanic_df['Pclass']==1
cond3 = titanic_df['Sex']=='female'
titanic_df[ cond1 & cond2 & cond3]

 

 

 

 

 

정렬, Aggregation함수,

titanic_sorted = titanic_df.sort_values(by=['Name'])
titanic_sorted = titanic_df.sort_values(by=['Pclass', 'Name'], ascending=False)

titanic_df[['Age', 'Fare']].mean()

 

 

 

 

 

GroupBy 적용

titanic_groupby = titanic_df.groupby(by='Pclass')

titanic_groupby = titanic_df.groupby('Pclass').count()

titanic_groupby = titanic_df.groupby('Pclass')[['PassengerId', 'Survived']].count()

titanic_df.groupby('Pclass')['Age'].agg([max, min])

agg_format={'Age':'max', 'SibSp':'sum', 'Fare':'mean'}
titanic_df.groupby('Pclass').agg(agg_format)

 

 

 

Nan 처리

titanic_df.isna().head(3)
titanic_df.isna( ).sum( )

titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')


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

 

 

 

apply lambda로 데이터 가공하여 파생변수 추가

titanic_df['Name_len']= titanic_df['Name'].apply(lambda x : len(x))
titanic_df[['Name','Name_len']].head(3)

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

titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : 'Child' if x<=15 else ('Adult' if x <= 60 else 
                                                                                  'Elderly'))
titanic_df['Age_cat'].value_counts()

# 나이에 따라 세분화된 분류를 수행하는 함수 생성. 
def get_category(age):
    cat = ''
    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

# lambda 식에 위에서 생성한 get_category( ) 함수를 반환값으로 지정. 
# get_category(X)는 입력값으로 ‘Age’ 컬럼 값을 받아서 해당하는 cat 반환
titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : get_category(x))
titanic_df[['Age','Age_cat']].head()
    

 

 

 

 

get_dummy로 인코딩

# get_dummy로 인코딩하기
titanic_df['Sex']

pd.get_dummies(titanic_df['Sex'])

pd.get_dummies(titanic_df['Pclass'])

 

 

 

 

replace

 

 

 

 

str.split