[빅분기 실기] 판다스 (pandas) 필터링, 결측치 처리

2024. 11. 9. 16:00빅데이터 분석기사

반응형

데이터를 불러온다.

 

import pandas as pd

df = pd.read_csv('cafe2.csv')  # https://kdh9797-devwiki.tistory.com/83 cafe2 만들기 참고
df

 

1. 필터링

1-1. 1개 조건 필터링

특정 컬럼에 조건식을 적용하면 True/False가 반환된다.

조건에 만족하면 True, 만족하지 않으면 False이다.

'칼로리' 컬럼의 각 값이 50보다 작은 지를 나타내는 코드이다.

 

df['칼로리'] < 50

 

조건 필터링 결과

 

Boolean 결과를 데이터프레임의 대괄호 안에 넣으면 True로 표시된 행들만 선택된다.

df[df['칼로리'] < 50]

 

Boolean 결과가 True

 

1-2. NOT 연산자

'~' 연산자는 조건의 반대를 필터링하는 데 사용한다.

True를 False로 False를 True로 변경한다.

 

df[~(df['칼로리'] < 50)]

 

NOT 연산 결과

 

1-3. 복수 조건 필터링

조건이 2개 이상일 때 합집합(OR) 또는 교집합(AND)인지를 구분해야 한다.

판다스에서는 & (교집합), | (합집합)을 사용한다.

 

# 가격이 5000원 이상이면서 칼로리가 100보다 큰 데이터
df[(df['가격'] >= 5000) & (df['칼로리'] > 100)]

 

복수 조건 필터링 (교집합)

 

# 가격이 5000원 이상이거나 칼로리가 100보다 큰 데이터
df[(df['가격'] >= 5000) | (df['칼로리'] > 100)]

 

복수 조건 필터링 (합집합)

 

원산지가 '과테말라' 데이터만 필터링해 보자.

 

# 원산지가 과테말라인 데이터
df[df['원산지'] == '과테말라']

 

복수 조건 필터링 (값만 출력)

 

1-4. isin()을 사용한 필터링

isin()은 주어진 값이 있는지 확인한다.

주어진 값이 있으면 True, 그렇지 않으면 False를 반환한다.

# 녹차 찾기
df['메뉴'].isin(['녹차'])

 

isin() 결과

 

데이터프레임에 boolean 결과를 대입하면 조건에 만족하는 데이터만 찾을 수 있다.

 

# 녹차 데이터 출력
df[df['메뉴'].isin(['녹차'])]

 

isin() 결과의 데이터

 

isin()을 사용할 때 유용한 점은 여러 개의 값을 한 번에 찾을 수 있다는 점이다.

100개의 값을 조건식으로 찾는다면 최대 100개의 조건식이 필요하다.

리스트에 찾는 값을 담고, 그 리스트를 isin()의 괄호 안에 작성하면 리스트에 포함된 데이터를 찾을 수 있다.

 

menu = ['녹차', '카푸치노', '카페라떼']
df[df['메뉴'].isin(menu)]

 

isin() 여러 개 데이터 찾기

 

2. 결측치 처리

데이터를 불러온다.

 

import pandas as pd

df = pd.read_csv('cafe2.csv')  # https://kdh9797-devwiki.tistory.com/83 cafe2 만들기 참고
df.head()

 

데이터프레임 결과

 

2-1. 결측치 탐색

결측치를 확인하는 데는 df.isnull()을 사용한다.

각 값마다 결측치(NaN)이면 True를 반환하고, 값이 있다면 False를 반환한다.

 

df.isnull()

 

결측치 결과

 

df.isnull()에 sum()을 붙이면 컬럼별로 모두 더할 수 있다.

True는 1이고 False는 0이다.

컬럼별로 더하면 결측치 수를 확인할 수 있다.

 

df.isnull().sum()

 

결측치 합

 

isnull() 외에 isna()를 활용해도 같은 결과가 나온다.

 

df.isna().sum()

 

결측치 합

2-2. 결측치 채우기

fillna()를 활용해 임의의 값으로 채울 수 있다.

 

# 원산지 컬럼에 결측치를 코스타리카로 채우기
df['원산지'].fillna('코스타리카', inplace=True)
df

 

결측치 채우기 결과

 

※ 새로운 csv 파일로 저장 (참고)

 

df.to_csv('cafe3.csv', index=False)