데이터 프레임과 시리즈의 정렬 sort_values()
데이터 프레임과 시리즈의 정렬을 위해서는 sort_values() 메소드를 이용합니다.
기본 형식은 다음과 같습니다.
df.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
- by : 정렬의 기준이 될 레이블 입니다.
- axis : axis=0 은 인덱스, axis=1은 컬럼을 의미하며, 0 이면 행 1이면 열을 기준으로 정렬합니다.
- inplace : 원본을 대체할지 여부입니다. True 일 경우 원본을 대체합니다.
- kind : 알고리즘 모드이며 quicksort, mergesort, heapsort, stable이 있는데, 속도와 효율성의 차이를 갖습니다. 기본적으로 quicksort 이 디폴트이며 여기서는 깊게 다루지는 않겠습니다.
- na_position : Na 값의 위치입니다. na_position='last' 는 정렬시 맨 뒤, first 의 경우 맨 앞에 위치하며, 여기에서는 깊게 다루지는 않겠습니다.
- ignore_index : 인덱스의 무시 여부입니다. True 의 경우 인덱스의 순서와 상관없이 0, 1, 2, ... 로 정해집니다.
- key : 이 인수를 통해 정렬방식으로 함수를 사용할 수 있습니다. 즉 lamba의 사용이 가능합니다.
- ascending : True 의 경우 오름차순, False 의 경우 내림차순으로 정렬하며 디폴트값은 오름차순입니다.
주요 파라미터는 by, ascending, inplace 입니다.
앞서 계속 활용했던 타이타닉 탑승객 명단을 정렬해보겠습니다.
탑승객 명단 중 Name 이름을 기준으로 정렬해봅니다.
by= 컬럼명 을 기재하여 Name 을 기준으로 오름차순 정렬을 반환받을 수 있습니다.
titanic_sorted = titanic_df.sort_values(by=['Name'])
titanic_sorted.head(3)
여러 개의 칼럼으로 정렬하기 위해서는 by = 리스트 형식으로 정렬하려는 칼럼 을 입력하면 됩니다.
ascending 을 False 값으로 주어 내림차순으로 정렬을 반환합니다.
titanic_sorted = titanic_df.sort_values(by=['Name', 'Pclass'], ascending=False)
titanic_sorted.head(3)
inplace 는 앞서 사용했던 바와 같이 True 로 설정하면 호출한 데이터 프레임의 정렬 결과를 그대로 적용하며, 기본은 inplace = False 입니다.
Aggregation 함수
데이터 프레임에서 min() , max(), sum(), count() 와 같은 Aggregation (집계, 집합) 함수를 사용할 수 있습니다.
숨겨진 행과 오류 값을 무시할 수 있는 옵션을 통해 목록이나 데이터베이스에 여러가지 집계 함수를 적용시킵니다.
Aggregation 함수를 호출할 경우 모든 칼럼에 해당 Aggregation을 적용합니다.
가령 타이타닉 탑승자 명단 데이터 프레임에 count() 를 적용하면 모든 칼럼에 각 count() 에 대한 결과를 반환합니다.
단, Null 값은 반영하지 않기 때문에 해당 Null 값은 제외한 값이 카운트 됩니다.
만약 특정 칼럼에만 집계함수를 저용하고 싶다면 DataFrame 에 대상 칼럼들만 추출해서 적용하면 됩니다.
groupby() 적용
groupby() 기능은 데이터를 그룹별로 분할해서 독립된 그룹에 대해 별도의 데이터 처리를 하거나 그룹별 통계량을 확인할 때 유용하게 쓰이는 함수 입니다.
- split(나누기) : groupby() 에서 정의한 컬럼 조건에 따라 독립된 그룹으로 나눕니다.
- apply(적용하기) : 나뉘어진 독립 그룹별 함수들을 적용합니다. (예시는 sum)
- combine(결합하기) : 각각의 독립 그룹별로 함수가 적용된 결과를 종합하여 하나의 테이블로 합칩니다.
배움 출처 : https://teddylee777.github.io/pandas/pandas-groupby
가령 groupby(by='Pclass') 를 호출하면 Pclass 칼럼을 기준으로 그룹화된 객체를 반환합니다.
즉, Pclass 칼럼을 기준으로 나머지 모든 칼럼들에게 aggregation 함수를 적용할 수 있습니다.
Pclass 를 기준으로 모든 값들을 카운트(값의 갯수를 셈) 하겠습니다.
titanic_groupby = titanic_df.groupby('Pclass').count()
titanic_groupby
그룹화 된 객체는 같은 데이터 프레임이므로 [ ] 연산자로 셀렉트가 가능합니다.
즉, 전체 목록이 아닌 특정 칼럼만 필터링 해서 조회하고 싶다면 해당 객체에 [[ '칼럼명', '칼럼명' ]] 으로 필터링 해서 수행할 수 있습니다.
titanic_groupby = titanic_df.groupby('Pclass')[['PassengerId', 'Survived']].count()
titanic_groupby
여기까지 정렬과 집계, 그룹화 방법에 대해서 알아보았습니다.
다음에는 결손 데이터를 처리하는 것을 확인해볼게요.
'AI 머신러닝 딥러닝 > 파이썬 머신러닝 입문 공부일지' 카테고리의 다른 글
파이썬 머신러닝 입문 공부일지 8. apply lambda 데이터 가공 (0) | 2023.01.03 |
---|---|
파이썬 머신러닝 입문 공부일지 7. 결손 데이터 Null Data 처리하기 (0) | 2023.01.03 |
파이썬 머신러닝 입문 공부일지 5. Pandas 판다스 Index 객체 (1) | 2023.01.03 |
파이썬 머신러닝 입문 공부일지. 회귀 분석의 회귀란 무슨 뜻일까? (0) | 2023.01.02 |
파이썬 머신러닝 입문 공부일지 4. 판다스 Pandas, DataFrame 관련 메소드 기능들 (2) (0) | 2022.12.27 |