- 三种缺失符号及其对比【pandas 1.0之前】
三种记号(pandas 1.0) np.nan None np.NaT【时间序列用】
类型 float64 Nonetype
pandas._libs.tslibs.nattype.NaTType
equal的时候是否会包括在内 不包括 包括 不包括
某列出现该值的类型 1.数值型,布尔型统一转换为float64
2.字符型统一转换为O(object类型) 1.None传入数值型自动变换为np.nan
None传入时间型变量自动变换为np.NaT
2.None传入布尔类型,不改变原布尔列表
3.None传入字符型为NoneType
时间型变量类型不改变
- 统一三种缺失符号[pandas 1.0之后]
统一之前必须要做的操作:
—>将数据转换为Nullable类型
(数值类型首字母大写,如int64——Int64)
(布尔型:bool——boolean)
(字符型,object——string)
转换方法1:全表转换用covert_dtypes 转换
转换方法2:单列类型直接用astype转换
2-1. 做了哪些统一?
统一缺失值类型:pandas._libs.missing.NAType
统一缺失记号【dataframe表格中的显示】:< NA >
给单元格赋值np.nan 或 None 或 np.NaT统一转换为pd.NA
赋值给Nullable类型不改变其类型
使用str方法之后string(Nullable类型)不会因为缺失值改变类型,而原来的object会因为缺失值改变类型
2-2. 新NA的特性
2-2-1. 布尔运算
不依靠pd.NA的布尔表达返回真假:
(False & pd.NA ) ( True | pd.NA)
依靠pd.NA的返回< NA >
2-2-2. 算术运算
特殊情况
pd.NA ** 0=1
1 ** pd.NA=1
其他情况与pd.NA运算都返回< NA >
2-3. 缺失列/表含有空值的运算方法
法则:加法当0,乘法当1,累积运算忽略
#tip# pandas 1.0 之前的空值表示之前会改变数值类型
2-4. 分组的依据列含有空值,直接忽略空值分组
-
判断是否缺失或者非缺失
isna( ) ---->缺失:True 【列的是否缺失的布尔列表或者表的是否缺失的布尔表 】
notna() ----->不缺失:True 【列的是否缺失的布尔列表或者表的是否缺失的布尔表 】1.挑选整行都不缺失:
df[ df.notna( ).all(1) ]
2.挑选整行有一列缺失:
df[ df.isna( ).any(1) ] -
填充方法
4-1. 自定义填充
fillna(value,method)
##
value: 接受标量,字典,Series,DataFrame
method:
'ffill'--用最接近的前面的未缺失值填充
'bfill'--用最接近的后面的未缺失值填充
##
fillna满足对齐特性,若传入的字典/Series/DataFrame不足以覆盖所有列/所有单元格,那对齐首列只进行覆盖部分填充
4-2. 删除填充项
dropna(axis,how='any',subset)
##
axis: [此处axis不进行运算,可理解对每行/每列操作]
axis=0表示删除含有缺失值的行
axis=1表示删除含有缺失值的列
how:
'any'--包含一个缺失值,该行/列进行删除
'all'--整行/列都包含缺失值才删除
subset:
axis=0 的时候用,表示删除的查看是否有缺失值列的范围
##