python

Pandasでqueryを使ったNanの条件抽出方法

pandasのdataframeでqueryメソッドを使って条件抽出する際にNanを除く方法についてよく忘れるので忘備録として。

基本は 列名.isnull()でNanの行を抽出。

逆にNan以外の場合は~(チルダ)を列名の前につけて~列名.isnull()にする。

ただし、Nan!=NanがTrueとなるのを利用して列名同士を比較する方法もある。

import numpy as np
import pandas as pd

df = pd.DataFrame({'col1':[0,1,np.NAN,None]})
df
#	col1
#0	0.0
#1	1.0
#2	NaN
#3	NaN

df.query('col1.isnull()')
#	col1
#2	NaN
#3	NaN

#Nan!=Nan がTrueになるのを利用
df.query('col1!=col1')
#	col1
#2	NaN
#3	NaN

#~で否定を表す
df.query('~col1.isnull()')
#   col1
#0	0.0
#1	1.0

#Nan==Nan がFalseになるのを利用
df.query('col1==col1')
#   col1
#0	0.0
#1	1.0