728x90
- 데이터프레임에서 비어있는 데이터가 어디에 , 몇개 있는지 확인하는 방법
- .isna( ) =>>비어있는 데이터 확인
- .isna( ) .sum( ) =>>컬럼별로 비어있는 데이터 개수
- ..isna( ) .sum( ).sum( ) =>> 전체 데이터 중에 비어있는 데이터 개수
df = df = pd.DataFrame(data= items2, index=['store 1', 'store 2' , 'store 3' ])
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 NaN 10 NaN 4.0
비어있는 데이터 확인
df.isna( )
bikes pants watches shirts shoes suits glasses
store 1 False False False False False False True
store 2 False False False False False False False
store 3 False False False True False True False
비어있는 데이터가 컬럼별로 몇개 있는지 확인
df.isna().sum()
bikes 0
pants 0
watches 0
shirts 1
shoes 0
suits 1
glasses 1
dtype: int64
전체 데이터에서 비어있는 데이터가 몇개 있는지 확인
df.isna().sum().sum()
3
NaN을 처리하는 전략
1. 삭제하는 전략
- .dropna( ) 를 이용해서 비어있는 데이터의 행을 삭제한다.
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 NaN 10 NaN 4.0
df.dropna( )
bikes pants watches shirts shoes suits glasses
store 2 15 5 10 2.0 5 7.0 50.0
# NaN 데이터가 있는 행이 삭제된다.
2. 특정 값으로 채우는 전략
- .fillna( ) 를 이용해서 비어있는 데이터를 채운다.
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 NaN 10 NaN 4.0
# df에서 비어있는 행에 100을 채워라
df.fillna( 100 )
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 100.0
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 100.0 10 100.0 4.0
2번 전략의 예시 )
- 데이터의 컬럼을 가져와서 비어있는 데이터를 채우는 함수 .fillna( )를 이용한다.
- 컬럼의 개수가 여러개라면 리스트로 묶어서 표기한다.
# shirts 데이터의 비어있는 부분은 0으로 채운다.
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 NaN 10 NaN 4.0
df = df['shirts'].fillna(0)
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 0.0 10 NaN 4.0
# suits와 glasses의 비어있는 데이터는 100으로 채운다.
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 NaN 10 NaN 4.0
df[['suits', 'glasses']] = df[['suits', 'glasses']].fillna(100)
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 100.0
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 0.0 10 100.0 4.0
3. 위, 아래 행 과 왼쪽, 오른쪽 열로 비어있는 데이터를 채우는 전략
- method= 를 사용하여 채운다. 앞의 데이터를 가져오려면 'ffill', 뒤의 데이터를 가져오려면 'bfill'을 이용한다.
- 그리고 그 후에 axis = 0 or 1로 행인지 열인지 지정해준다.
- 행에서의 앞은 위의 데이터 뒤는 아래의 데이터, 열에서의 앞은 왼쪽, 뒤는 뒤쪽을 뜻한다.
- 변수. fillna(method = 'ffill' or 'bfill' , axis = 0 or1)
# 비어있는 데이터의 위 행의 데이터를 갖고와서 비어있는 데이터를 채우는 방법
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 NaN
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 NaN 10 NaN 4.0
df = df.fillna(method= 'ffill' , axis = 0)
df
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 100.0
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 0.0 10 100.0 4.0
# 비어있는 데이터의 아래 행의 데이터를 갖고와서 비어있는 데이터를 채우는 방법
df = df.fillna(method= 'bfill' , axis = 0)
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 50.0
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 2.0 10 7.0 4.0
# 비어있는 데이터의 왼쪽 열의 데이터를 갖고와서 비어있는 데이터를 채우는 방법
df.fillna(method='ffill', axis = 1 )
bikes pants watches shirts shoes suits glasses
store 1 20.0 30.0 35.0 15.0 8.0 45.0 45.0
store 2 15.0 5.0 10.0 2.0 5.0 7.0 50.0
store 3 20.0 30.0 35.0 35.0 10.0 10.0 4.0
# 비어있는 데이터의 오른쪽 열의 데이터를 갖고와서 비어있는 데이터를 채우는 방법
df.fillna(method= 'bfill', axis = 1)
bikes pants watches shirts shoes suits glasses
store 1 20.0 30.0 35.0 15.0 8.0 45.0 NaN
store 2 15.0 5.0 10.0 2.0 5.0 7.0 50.0
store 3 20.0 30.0 35.0 10.0 10.0 4.0 4.0
4. 비어있는 데이터를 컬럼의 평균, 최댓값, 최솟값 등등 으로 채우기
# 비어있는 데이터를 컬럼의 최댓값으로 채우기
df.fillna(df.mean())
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 50.0
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 15.0 10 45.0 4.0
# 비어있는 데이터를 컬럼의 최댓값으로 채우기
df.fillna(df.mean())
bikes pants watches shirts shoes suits glasses
store 1 20 30 35 15.0 8 45.0 100.0
store 2 15 5 10 2.0 5 7.0 50.0
store 3 20 30 35 0.0 10 100.0 4.0
max, mean, std, medianm 등등 으로 다양하게 채울 수 있다.
* 데이터가 채워져있는지 물어보는 함수
- .notna( )를 사용한다.
df.notna()
bikes pants watches shirts shoes suits glasses
store 1 True True True True True True True
store 2 True True True True True True True
store 3 True True True True True True True
728x90
'python > pandas' 카테고리의 다른 글
pandas - 문자열 컬럼에 describe( ) 함수 사용 (0) | 2022.11.24 |
---|---|
pandas - 카테고리별 데이터( Categorical Data ) (0) | 2022.11.24 |
pandas - 데이터 확인(head, tail) , 데이터의 통계치 확인(describe) (0) | 2022.11.24 |
pandas - reivews로 파일 읽기 (0) | 2022.11.24 |
pandas - column의 값을 index로 만들기와 인덱스 초기화 (0) | 2022.11.24 |