1.缺失值观察
.info()计算每一列的缺失值的个数,输出非空值non-null的个数及数据类型
.isnull()查看某一或者多列的缺失值
2.对缺失值进行处理
2.1一般的几种思路:
None、isnull()、np.nan:数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,所以最好用np.nan
2.2删除缺失值--dropna
dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) 删除缺失值 参数:
axis: default 0指行,1为列
how: {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的
thresh: int,保留含有int个非空值的行
subset: 对特定的列进行缺失值删除处理
inplace: 这个很常见,True表示直接在原数据上更改
2.3填充/替换缺失数据 - fillna、replace
fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
inplace参数的取值:True、False
True:直接修改原对象
False:创建一个副本,修改副本,原对象不变(缺省默认)
method参数的取值 : {‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None
pad/ffill:用前一个非缺失值去填充该缺失值
backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值(缺省默认这种方式)
limit参数:限制填充个数
axis参数:修改填充方向
3.查看数据中的重复值
duplicated():判断是否有重复值
drop_duplicates() :删除重复值
4.特征观察与处理
数值型特征、文本型特征
4.1分箱操作
pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
x:被分割的数组数据,可以是df[col],np.array,还可以是pd.seres,list 但是数据必须是一维的
bins:被分割后的区间,有三种形式,int值(如bins=5,就是将x平均分为5位),list或者np.array(如bins=[1,2,3],则将x按照(1,2],(2,3]分割),pandas.IntervalIndex 定义要使用的精确区间
right:bool型参数,默认为True,表示是否包含区间右部
labels:给分割后的区间打标签,但是labels的长度必须和分割后的区间的长度相等
retbins:bool型的参数,表示是否将分割后的bins返回
precision:保留区间小数点的位数,默认为Ω
include_lowest:bool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)
duplicates:是否允许重复区间
任务:对年龄进行分箱(离散化)处理
(1) 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
(2) 将连续变量Age划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示
(3) 将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示
4.2查看文本变量名及种类value_counts()及.unique()
4.3将文本变量转换为12345
方法:replace及map、使用sklearn.preprocessing的LabelEncoder
4.4将文本变量用one-hot编码表示
One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
例如:
自然状态码为:000,001,010,011,100,101
独热编码为:000001,000010,000100,001000,010000,100000