안녕하세요
저번에 포스팅에서 pydataset라이브러리를 통해 dataset을 가져오는 것을 정리해보았습니다.
2020/07/23 - [python] - pydataset 이란? 700개 이상의 테스트 데이터 library
이번엔 iris dataset을 이용하여 유용하고 실무에서 많이 쓰는 pandas 기능 4가지를 통해 데이터 정제를 해보겠습니다.
4 가지 기능을 설명하고, 실습 문제를 해결해보겠습니다.
1. 4가지 기능
1) 컬럼 순서 변경 기능
a. to_numpy()를 이용하는 경우
to_numpy를 이용하면 column을 ndarray 타입으로 변경이 가능합니다.
ndarray의 장점 중 하나는 ndarray[[인덱스]]와 같이 인덱스 순서를 직관적으로 바꿀 수 있다는 점입니다.
아래 2번째 셀을 보면 아래와 같은 코드가 있습니다.
col = col[[1,0,2]]
위 코드의 의미는 col의 인덱스를 [1,0,2] 순서로 바꾸겠다는 의미입니다.
이를 통해 컬럼 순서를 직관적으로 변경할 수 있습니다.
b. 직접 바꾸는 방법
df.columns.tolist()를 실행하면 컬럼이 리스트 형태로 예쁘게 출력됩니다.
이를 복사해서 순서를 직접 변경한뒤 df[[변경한 순서]] 와 같이사용하면 컬럼순서가 변경됩니다.
아래 그림 처럼 ['species', 'sepal_width', 'sepal_length']를 복사해서 직접 iris [내부]의 내부에 붙여 넣기 한 뒤, 순서를 'species'가 제일 앞에 오게 바꿨습니다.
사실 아래처럼 컬럼중 일부만 선택해도 되고, 다음에 코드를 봤을 때도 바로 어떤 컬럼을 썼는지 알 수 있기 때문에 컬럼순서 변경에는 직접 바꾸는 방법을 더 많이 씁니다.
2) insert 함수: 열 삽입 기능
열 삽입은 크게 2가지 방법으로 insert 함수를 쓰기도 하고, 안 쓰기도 합니다.
a. insert 함수
iris.insert(loc=0,column='Classification',value='normal')
- loc는 몇번째 열로 삽입할 건지입니다. loc=0이면 0번째 열로 삽입한다는 의미입니다.
- column은 삽입할 열의 제목을 뭐로 할지입니다. column='Classification'이면 열 제목을 'Classification'으로 한다는 것입니다.
- value는 삽입할 열의 값입니다. value='normal'처럼 단일 값을 넣으면, 열의 모든 값이 'normal'로 되지만, 행 개수만큼의 값을 리스트 등 일차원 배열 형태로 넣으면 개별적인 값으로 넣을 수도 있습니다.
b. df['test'] = value
이 방식으로 열을 삽입할때는 항상 제일 오른쪽 열로 삽입됩니다.
df['test'] = 'Tong!'
위와 같이 'test'컬럼에 단일 값을 넣으면 아래의 빨간 박스처럼 모두 그 값으로 들어갑니다.
df['test2'] = [1,2,3,4,5]
위처럼, 행 개수(5개)에 맞춰서 iterator(리스트 등의 일차원 배열 형태)로 값을 넣으면, 아래처럼 순차적으로 값이 들어갑니다.
3) loc: 원하는 조건의 데이터 찾고, 값 변경하기 기능
A. 조건 설정하기
먼저 df.mean()을 하면 df의 모든 열에대해 평균이 구해집니다. df.mean().열이름 처럼쓰면 해당 열의 평균값만 딱 나오게 됩니다.
조건 설정은 df의 컬럼에 대해 True or False로 나올 수 있는 조건을 부여하면 됩니다.
예를 들어, df.A > 10은 df의 A 컬럼중 10보다 큰 수라는 조건입니다.
조건끼리는 서로 and(& 연산자 이용)와 or( | 연산자 이용)을 사용하여 풍부한 조건을 줄 수 있습니다.
아래의 condition을 보면 length_condition조건과 width_condition조건을 모두 만족하는 경우임을 알 수 있습니다.
B. loc를 이용해 특정 조건에서 값 변경
loc를 이용하면 조건을 만족하는 열에 특정 값을 넣을 수 있습니다.
df.loc[ 조건, '열 이름' ] = value
위처럼 조건에 맞는 행에 대해 '열 이름'열에 value를 넣을 수 있습니다.
아래에서는 condition 조건을 만족하면 Classification 열에 'big' 값을 넣겠다는 코드입니다.
4) Groupby: 특정 조건으로 그룹화하고, 통계치 구하기 기능
Groupby는 특정 열의 값들로 그룹화하고, 집계 함수를 적용할 수 있는 함수입니다.
groupby에 대해 잘 설명한 사이트가 있어서 공유드립니다.
https://rfriend.tistory.com/392
아래의 예시를 보면 Classification이 'big'인 조건에서 'species'를 기준으로 그룹화하여 집계 함수를 적용합니다.
집계 함수는 'species' 컬럼에 대해선 개수를 세는 count함수를 적용하고
'sepla_width'와 'sepal_length'에 ['평균' , '표준편차', '최댓값', '최솟값']을 구하는 집계 함수를 동시에 적용했습니다.
2. 실습 문제
위와 같은 iris 데이터가 있을 때,
sepal_width와 sepal_length가 모두 평균 초과인 데이터에 대해서,
species의 데이터 개수와 sepal_width, sepal_length의 평균, 표준편차, 최댓값, 최솟값을 한 테이블에 보이시오.
최종 출력은 아래와 같으면 됩니다.
* 문제 csv 파일
풀이는 유용한 기능을 모두 써보는 취지에서 작성하였기 때문에, 가장 효율적인 답은 아닙니다.
이번에는 pandas의 유용하고 실무에서 많이 쓰이는 4가지 기능(컬럼 순서 변경, insert, loc, Groupby)에 대해 알아보았습니다.
다음에 더 좋은 글로 찾아오겠습니다.
읽어주셔서 감사합니다.
'Data Science & Analysis > Pandas' 카테고리의 다른 글
[Pandas] 다중 인덱스 엑셀 읽기 및 처리 (Multi Index, Multi Column) (0) | 2020.09.15 |
---|---|
[Pandas] 리스트(list) 순서로 데이터프레임 정렬 (0) | 2020.09.14 |
[Pandas] Dataframe 비교 - 부분비교와 전체비교 (3) | 2020.08.13 |
[Pandas] str.extract, str.contains 정규표현식 사용 (0) | 2020.08.06 |
pydataset 이란? 700개 이상의 테스트 데이터 library (0) | 2020.07.23 |