2022 데이터 사이언스/빅데이터 분석과 모델링

02. Pandas(1): 데이터 조회 및 결측값 처리

gool 2022. 6. 12. 23:34
Pandas는 다양한 데이터 분석 기능을 제공하는 Python 라이브러리이다.

 

 

 

Pandas(Panel data system)는 데이터 분석에 사용되는 Python 라이브러리로,

SQL, 엑셀시트처럼 행과 열로 이루어진 데이터를 효율적으로 가공 및 처리할 수 있도록 해준다.

 

 

 

Pandas 자료구조

 

Series

  • 가장 간단한 1차원 구조
  • 하나의 열을 의미

 

 

 

DataFrame

  • 행과 열을 가진 2차원 자료형
  • 별도의 인덱스를 지정하지 않으면 0부터 시작되는 인덱스를 기준으로 데이터 저장

 

 

 

 

데이터프레임 데이터 조회

 

데이터프레임 df

 

 

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