缺失值的处理

可以看到NaN类型在比较的是不相等的,原因是numpy.NaN是一种特殊的numpy.float64,如果想比较NaN是否相同,需要将其转换为该类型自己定义的特殊值(注意不能转换为None,None在Series里不能比较,而单独的值才能比较)

import pandas as pd
import numpy as np
s = pd.Series(['apple', '1.0', '2','2019-01-02',1, False,None,pd.Timestamp('2018-01-05')])

# 缺失值的比较 np.NaN == np.NaN返回是False
a = pd.to_numeric(s, errors='coerce')  # 将时间字符串和bool类型转换为数字,其他均转换为NaN
b = pd.to_numeric(s, errors='coerce')  # 将时间字符串和bool类型转换为数字,其他均转换为NaN
a==b

a[a==np.NaN] # 索引不到np.NaN
a[a.isnull()] = None # 能索引到,但是不能赋值为None
a[a.isna()] =None # 能索引到,但是不能赋值为None

a = a.where(a.notnull(), None) # 可以转换
b = b.where(b.notnull(), None)
a == b  # 但是Series里的None不能比较,返回False,这个坑太大了,在Python中None == None 返回是Ture

a[a.isnull()] = -1000 # 可以转换
a[a.isna()] = -1000 # 可以转换
a = a.where(a.notnull(), -10000) # 可以转换
b = b.where(b.notnull(), -10000) # 可以转换
a==b # 可以判断
posted @ 2021-07-08 15:33  晓尘  阅读(78)  评论(0)    收藏  举报