불린 인덱싱 

 

매우 편리한 데이터 추출 방식이다. 
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가 필요한 경우에는 일반 함수를 제작해서 사용하는 것이 낫다.) 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기