Pandas는 다양한 데이터 분석 기능을 제공하는 Python 라이브러리이다.
Pandas(Panel data system)는 데이터 분석에 사용되는 Python 라이브러리로,
SQL, 엑셀시트처럼 행과 열로 이루어진 데이터를 효율적으로 가공 및 처리할 수 있도록 해준다.
Pandas 자료구조
Series
- 가장 간단한 1차원 구조
- 하나의 열을 의미
DataFrame
- 행과 열을 가진 2차원 자료형
- 별도의 인덱스를 지정하지 않으면 0부터 시작되는 인덱스를 기준으로 데이터 저장
데이터프레임 데이터 조회
1) 열(column) 기준 조회
- df['name'] / df.name : 'name' 컬럼 조회
- df[['name', 'grade']] : 여러 개의 컬럼 데이터 조회
* 여러 개의 컬럼 동시 조회 시 대괄호를 사용해 list 형태로 표현
2) 행(row) 기준 조회
(1) 슬라이싱 정보 [start : end]를 사용한 위치 인덱스 기반 데이터 조회
* start는 포함, end는 제외
- df[1:3] : 1~2행 조회
- df[1:] : 1행 이후의 모든 행 조회
(2) loc를 사용한 인덱스 이름 기준 데이터 조회 (가장 많이 사용)
* 범위의 끝 포함 ['a' : 'c'] → 'a', 'b', 'c'
데이터프레임.loc[row 조건식(, column 조건식)]
- df.loc[:, 'name'] : 'name' 컬럼의 모든 행 조회
- df.loc[:, ['name', 'grade']] : 'name', 'grade' 컬럼의 모든 행 조회
- df.loc[1:3, ['name', 'grade']] : 'name', 'grade' 컬럼의 1~3행 조회 (범위의 끝 포함)
- df.loc[1:3, 'name' : 'grade'] : 'name' ~ 'grade' 컬럼의 1~3행 조회
(3) iloc를 사용한 위치 인덱스 기준 데이터 조회
* 범위의 끝 제외 [3:7] → 3, 4, 5, 6
데이터프레임.iloc[row 조건식(, column 조건식)]
- df.iloc[0:3] : 0~2행 조회 (df[0:3]과 동일한 결과)
- df.iloc[0:3, 1:3] : 1~2열의 0~2행 조회
* loc, iloc 사용 시 row 조건과 column 조건 동시에 적용 가능
3) 불린 인덱싱(Boolean Indexing)을 활용한 데이터 조회
- df['points'] > 1.5 : 'points' 값이 1.5보다 큰지 여부를 True, False로 나타낸 Series 반환
- df[df['points'] > 1.5] : 'points' 열의 값이 1.5보다 큰 모든 데이터 반환
- df[df['points'] > 1.5][['score', 'high_score']]
: 'points' 열의 값이 1.5보다 큰 데이터에서 'score', 'high_score' 열만 추출
* loc 활용
- df.loc[df['points'] > 1.5, : ] : 'points' 열의 값이 1.5보다 큰 모든 데이터 반환
- df.loc[df['points'] > 1.5, 'grade' : 'high_score']
: 'points' 열의 값이 1.5보다 큰 'grade' ~ 'high_score' 열의 모든 데이터 반환
- df.loc[df['grade'] == 'A', ['name', 'grade', 'high_score']]
: 'grade' 열의 값이 'A'인 'name', 'grade', 'high_score' 열의 모든 데이터 반환
데이터프레임 가공
1) 연산을 통한 컬럼 데이터 추가
- df['high_score'] = df['score'] > 90
: 'score' 열의 값이 90보다 큰지 여부를 True, False로 나타낸 'high_score' 열 생성
2) 행(row) 데이터 삭제
- df.drop(3) : 3행이 삭제된 데이터 조회
- df.drop(3, inplace = True) / df = df.drop(3) : df의 3행 삭제 (원본 데이터 변경)
- df.drop('etc', axis=1) : df의 'etc' 열 삭제 (원본 데이터 변경)
* axis=1은 열 방향으로 동작하도록 하는 옵션이다.
3) 열(column) 데이터 삭제
- del df['etc'] : df의 'etc' 열 삭제 (원본 데이터 변경)
isin 데이터 조회
.isin()을 활용하면 특정 값을 가진 행들을 따로 추출하여 조회할 수 있다.
데이터프레임의 열.isin(추출 값들의 리스트)
- df['grade'].isin(['A', 'B']) : 'grade' 값이 'A', 'B'인지 True, False로 나타낸 Series 반환
- df.loc[df['grade'].isin(['A', 'B']), ['score', 'points']]
: 'grade' 열의 값이 'A' 또는 'B'인 행의 'score', 'points' 데이터 반환
결측값 처리
결측값이 존재하는 데이터는 분석에 활용하지 못하는 경우가 있어,
데이터 분석에 앞서 결측치를 특정 값으로 대체하는 등 결측값 처리 과정이 중요하다.
null 데이터와 유사한 개념인 NaN(Not a Number) 데이터를 추출하여,
지정된 값으로 변환하거나 NaN 데이터가 포함된 행을 제거하는 법을 알아보려고 한다.
데이터프레임.isnull() / 데이터프레임.isna()를 사용하여 데이터 내 NaN 데이터를 찾아
NaN 데이터이면 True, 수치 데이터이면 False를 반환하는 DataFrame을 조회할 수 있다.
아래와 같이 NaN 데이터가 포함된 행만 따로 추출할 수 있다.
- df['data1'].isnull() : 'data1' 값의 NaN 여부를 True, False로 나타낸 Series 반환
- df[df['data1'].isnull()] : 'data1' 값이 NaN인 모든 행을 추출하여 반환
(1) 결측값 채우기
데이터프레임.fillna(value = '...', inplace = True)
데이터프레임 내 NaN 데이터를 찾아 지정된 value 값으로 변환하여 반환
- df['data1'].fillna(value = 0) : 원본 데이터 유지
- df['data1'].fillna(value = 0, inplace = True) : 원본 데이터 변경
(2) NaN 데이터가 포함된 행 제거
데이터프레임.dropna()
- .dropna(how='all') : 행 데이터의 모든 값이 NaN인 경우
- .dropna(how='any') : 행 데이터 값 중 하나라도 NaN인 경우
* 괄호 안에 값을 적어주지 않을 경우 기본값은 how='any'
아래 링크에서 Pandas를 활용한 데이터 조회 및 결측값 처리 실습 코드를 확인할 수 있다.
실습에 사용한 툴은 jupyter notebook이다.
https://github.com/tldnjs1231/data-analytics/blob/main/data-analytics-02-pandas_(1).ipynb
GitHub - tldnjs1231/data-analytics
Contribute to tldnjs1231/data-analytics development by creating an account on GitHub.
github.com
'2022 데이터 사이언스 > 빅데이터 분석과 모델링' 카테고리의 다른 글
06. 데이터 시각화: matplotlib, seaborn (0) | 2022.06.20 |
---|---|
05. Pandas(4): 타이타닉 예제 (0) | 2022.06.20 |
04. Pandas(3): 데이터 합치기 (0) | 2022.06.13 |
03. Pandas(2): 정렬 및 Grouping (0) | 2022.06.13 |
01. 데이터 사이언스란? (0) | 2022.06.12 |