Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
Pandas Series [Part4] 판다스 Null 데이터 다루기
data_analytics
pandas

Pandas Series [Part4] 판다스 Null 데이터 다루기

Jay Kim
Jay Kim 20 Jan 2022
Pandas Series [Part3] 판다스 데이터 부분 추출 Pandas Series [Part5] 판다스 그루핑

Table of Contents

  • np.nan == np.nan은 False다
  • NaN은 논리적 오류를 발생시킨다
  • NaN 여부 체크하기
    • NaN 인지 확인하기
    • 전체 데이터프레임에 NaN 값 여부
    • 각 컬럼별 NaN 개수
    • NaN 값이 하나라도 있는 컬럼
    • NaN 값이 하나라도 있는 행
    • NaN 값이 하나도 없는 컬럼
    • NaN 값이 하나도 없는 행
    • NaN 값 가지는 데이터프레임간의 동등 비교
  • NaN 값 처리하기
    • NaN 값 가지는 행 날리기
    • NaN 값 가지는 컬럼 날리기
    • NaN 값 채우기

np.nan == np.nan은 False다

  • np.nan이 포함된 값을 == np.nan 으로 잡아내려 하면 안된다
  • (참고로 None==None은 True다)

np.nan == np.nan
-------------------
False

NaN은 논리적 오류를 발생시킨다

  • 다음과 같은 데이터가 있다고 해보자.

condition_A = df['col2'] > 5
not_condition_A = df['col2'] <= 5

df[condition_A]
df[not_condition_A]
  • NaN은 5보다 크지도 작지도 않다. 그래서 condition_A에도, not_condition_A에도 속하지 않는다
  • 당연해 보이지만, 나중에 데이터가 커지면 ‘A에 안속하니 당연히 not A에 속하겠지?’라고 생각하지만 어디에도 속하지 않는 결과를 초래한다

  • condition_A의 여집합은 그러면 어떻게 얻을 수 있을까
df[condition_A.eq(False)]

NaN 여부 체크하기

  • 다음과 같은 데이터가 있다고 해보자

NaN 인지 확인하기

df.isna()


# isna() 의 반대는 notna()
# df.notna()

전체 데이터프레임에 NaN 값 여부

df.isna().any().any()
----------------------
True

각 컬럼별 NaN 개수

df.isna().sum()
----------------------
A    1
B    1
C    1
D    1
E    2


# 각 행별 NaN 개수
# df.isna().sum(axis=1)

NaN 값이 하나라도 있는 컬럼

df.isna().any().index
------------------------
Index(['A', 'B', 'C', 'D', 'E'], dtype='object')

NaN 값이 하나라도 있는 행

df[df.isna().any(axis=1)]

NaN 값이 하나도 없는 컬럼

df.dropna(axis=1)

NaN 값이 하나도 없는 행

df.dropna(axis=0)

NaN 값 가지는 데이터프레임간의 동등 비교

  • 정답은 equals()
  • equals()는 NaN을 고려해서 동등 비교한다
df.equals(df)
------------------
True
  • ((df == df).all().all() 이렇게 같은 것끼리 비교해도 np.nan == np.nan 은 False 여서 False가 된다)
df == df

(df == df).all().all()
--------------------------
False

NaN 값 처리하기

NaN 값 가지는 행 날리기

df.dropna(axis=0)

NaN 값 가지는 컬럼 날리기

df.dropna(axis=1)

NaN 값 채우기

# 0으로 채우기
df.fillna(0)

# 앞에 있는 값으로 채우기
df.fillna(method='ffill')

Pandas Series [Part3] 판다스 데이터 부분 추출 Pandas Series [Part5] 판다스 그루핑

You may also like

See all pandas
21 Jan 2022 Pandas Series [Part10]: 주피터 노트북에서 시각화를 위한 대시보드 만들기
data_analytics
pandas

Pandas Series [Part10]: 주피터 노트북에서 시각화를 위한 대시보드 만들기

20 Jan 2022 Pandas Series [Part7] 판다스 시계열 데이터
data_analytics
pandas

Pandas Series [Part7] 판다스 시계열 데이터

20 Jan 2022 Pandas Series [Part6] 판다스 조인
data_analytics
pandas

Pandas Series [Part6] 판다스 조인

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.