불린 인덱싱
매우 편리한 데이터 추출 방식이다.
iloc[ ], loc[ ] 을 사용하기 보다는 불린 인덱싱을 이용하여 데이터를 가져오는 경우가 더 많다.
Why?
데이터 세트의 데이터 수는 일일이 수작업으로 인덱스를 적어서 처리하기에는 너무 많다.
따라서, 조건을 확인하고 인덱스를 적기보다는 해당 조건을 만족하는 데이터들을 바로 추출하는 불린 인덱싱을 이용하는 것이다.
loc[ ] 을 사용하면서도 불린 인덱싱을 할 수 있다.
ex>
#두 코드는 동일한 기능을 가지고 있다.
titanic_df[titanic_df['Age'] > 60][['Name','Age']]
titanic_df.loc[titanic_df['Age'] > 60, ['Name','Age']]
※ 복수개의 조건들을 사용하는 경우 [ ](대괄호) 안에 조건들을 ( )(소괄호)로 묶고 &을 통해서 연결한다.
ex>
titanic_df[(조건1) & (조건2) & (조건3)]
,혹은
cond1= 조건 1
cond2= 조건 2
cond3= 조건 3
titanic_df[cond1 & cond2 & cond3]
이렇게 각 조건들을 특정 변수에 저장하고, 변수들을 대괄호 안에 입력함으로써 불린 인덱싱을 하는 것도 가능하다.
정렬, Aggregation 함수, GroupBy 함수
정렬
DataFrame / Series 정렬을 위해서 sort_values() 함수를 사용하다.
sort_values()에서 주요 파라미터는 by / ascending / inplace 이다.
ex>
sort_values(by = ['칼럼명'])
해당 칼럼명으로 오름차순으로 정렬한다.
칼럼은 복수개여도 가능하다.
Aggregation 함수
min(), max(), sum(), count() 등의 함수를 의미한다.
DataFrame.count() 같이 DataFrame.Aggregation 함수를 사용하면, 각 column 에 대해서 해당 연산이 적용된다.
특정 column만 연산이 필요한 경우 [ ](대괄호)를 이용한다.
ex>
titanic_df[['Age','Fare']].mean()
GroupBy 함수
by파라미터의 인자로 들어가는 column의 값들에 따라 분류한다.
Aggregation 함수와 같이 쓰이는 경우가 많다.
ex>
titanic_groupby = titanic_df.groupby('Pclass').count()
마찬가지로, 특정 column들에 대해서 하는 것도 가능하다.
적용 :
1. 복수개의 Aggregation 함수를 사용 -> agg([ ])
ex> titanic_df.groupby('Pclass')['Age'].agg([min, max])
2. 복수개의 column 들에 각각 다른 Aggregation 함수를 적용
ex> agg_format = {'Age' : 'max', 'SibSp' : 'sum', 'Fare' : 'mean'} #dictionary 형태이다.
titanic_df.groupby('Pclass').agg(agg_format)
Null 데이터 처리
NaN으로 표현을 하기도 한다.
1. NaN 여부 확인 : isna( )
모든 값을 True / False로 알려준다.
.sum() 함수를 추가하면 각 column 마다 NaN의 개수를 확인하는 것이 가능하다.
2. NaN 값 대체 : fillna( )
해당 column의 NaN 데이터를 채워넣는다.
ex > titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
Apply / Lambda 함수
일반 함수를 쓰면 되지 왜 임시함수인 lambda 함수를 만들어서 사용을 하는가?
- 함수를 만들어야 하는데, 사용빈도나 비중이 작아 애매한 경우
다시 말해, 연산이 복잡해서 함수를 써야하기는 하지만, if / elif/ else문과 for / while등이 마구 섞여 사용되지는 않아 일반함수를 만들어 사용하기에는 비효율적일때 lambda 함수를 사용한다.
특히, column의 데이터 값들을 '약간(?)' 복잡하게 연산해야 하는 경우에 많이 사용한다.
ex>
titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x : len(x))
이처럼 사칙연산, 인덱스 등을 활용해서 연산하기는 복잡하지만, 그렇다고 일반함수를 궅이 만들어야 할까 의문이 드는 경우, .apply( ) 함수 안에 lambda 함수를 제작해서 데이터를 처리한다.
일반 함수를 제작한 경우
length() 이라는 함수를 만들었다고 할 때,
titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x: length(x))라고 하면 해당 함수가 적용된다.
단, lambda 함수에서 if / else는 사용할 수는 있지만, elif는 사용할 수 없다.
하지만, else 구문 안에 다시 if와 else를 넣어 elif의 기능을 제작할 수는 있다.
(2개 이상의 elif가 필요한 경우에는 일반 함수를 제작해서 사용하는 것이 낫다.)
'데이터 분석 & 시각화 > Pandas' 카테고리의 다른 글
Pandas(판다스) 기본 실습 - 4 (데이터 셀렉션 및 필터링 - [ ] / .loc[ ] / .iloc[ ] / 불린 인덱싱) (0) | 2020.08.19 |
---|---|
Pandas(판다스) 기본 실습 - 3 ( 인덱스) (0) | 2020.08.19 |
Pandas(판다스) 기본 실습 - 2 (DataFrame 열 생성, 변경, 삭제) (0) | 2020.08.11 |
Pandas(판다스) 기본 실습 - 1(판다스 기초) (1) | 2020.08.08 |
Machine Learning 관련 패키지 : Pandas (파이썬 머신러닝 완벽 가이드) - 1 (0) | 2020.07.26 |
최근댓글