数据判断:2018/11/8 2019/1/5
1.函数:缺省值判断
pd.isna(obj) /isnull(obj) #检测类似数组对象缺失值。
pd.notna(obj) /notnull(obj) #检测类似数组对象非缺失值。
参数:obj:标量或数组
返回:布尔或布尔数组
说明:
# NA值如None或np.nan,NaT将映射True值。''或np.inf不被视为NA值
# pandas.options.mode.use_inf_as_na = True#视为na值
# Series,DataFrame也有此方法;full,notfull是别名
函数:元素非零判断
s.all([axis, bool_only, skipna, level]) #判断所有元素都为True(非0)
s.any([axis, bool_only, skipna, level]) #返回任何元素在请求的轴上是否为True
df.all(axis = 0,bool_only = None,skipna = True,level = None,** kwargs )
df.any(axis=0, bool_only=None, skipna=True, level=None, **kwargs)
# 如系列或Dataframe轴中所有元素都非零,非空或不为假,则返回True。
参数:
axis=0:{0或'index',1或'columns',None},#应减少哪个或哪些轴
# 0 /'index':减少索引,返回索引为原始列标签的Series
# 1 /'columns':减少列,返回索引为原始索引的Series
# None:减少所有轴,返回标量。
skipna=True:排除NA / null值。如整行/列为NA结果为NA。
level=None:int或level name# 如轴是MultiIndex沿级别level计数,折叠为系列
bool_only=None:仅包含布尔列。
# 如果为None,将尝试使用所有内容,然后仅使用布尔数据。未针对系列实施。
返回:all : 布尔标量,Series或DataFrame(如果指定了级别)
2.实例1:缺省值判断
# 实例1:标量参数
pd.isna(None)#True
# 实例2:ndarrays数组
array = np.array([[1, np.nan, 3], [4, 5, np.nan]])
pd.isna(array) #array([[False, True, False],[False, False, True]])
#实例3:索引,返回一个布尔值的ndarray。
index = pd.DatetimeIndex(["2019-07-05", "2019-07-06", None])
b=pd.isna(index) #array([False, False, True])
type(b) #numpy.ndarray
#实例4:序列数据帧
s= pd.Series([1, 2,np.nan,np.inf,''])
df = pd.DataFrame([s.tolist()],columns=list('ABCDE'))
s.isna().tolist() # [False, False, True, False, False]
df.isna().values.tolist()# [[False, False, True, False, False]]
pd.isna(df1['D'])
df['D'].isna() # 等价
实例2:非零判断all
#实例1:系列
pd.Series([True, True]).all() # True
pd.Series([1, 0]).all() # False
#实例2:DataFrames
# 实例2.1:axis=0默认检查列值是否非零
df = pd.DataFrame({'A': [True, True],'B': [True, False]})
df.all() #默认检查列值是否非零
#实例2.2:axis='columns'检查行方式值是否都返回True。
df.all(axis='columns') #检查行值是否非零
#实例2.3:axis=None是否每个值都是True
df.all(axis=None) # False
# df df.all() df.all(axis='columns')
A B A True 0 True
0 True True B False 1 False
1 True False dtype: bool dtype: bool
实例3:非零判断any
# 实例1:
df.any(axis=None) # 聚合整个DataFrame #True
pd.DataFrame([]).any()# Series([], dtype: bool)空df是一个空系列
# 实例2:多索引
iterables = [['s1', 's2', 's3', 's4'], ['ss1', 'ss2']]
index=pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df=pd.DataFrame(np.arange(18).reshape(6, 3), index=index[:6], columns=list('ABC'))
df
A B C
first second
s1 ss1 0 1 2
ss2 3 4 5
s2 ss1 6 7 8
ss2 9 10 11
s3 ss1 12 13 14
ss2 15 16 17
df.any() df.any(level='first') df.any(level='second')
A B C A B C
A True first second
B True s1 True True True ss1 True True True
C True s2 True True True ss2 True True True
dtype: bool s3 True True True