02数据清洗及特征处理

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

你可能感兴趣的:(02数据清洗及特征处理)