一、缺失值处理
1.1 缺失值处理方式
1.1.1 思路
1.删除含有缺失值的样本(nan)
2.替换/插补
1.1.2 处理nan
1.判断数据中是否存在nan
- pd.isnull(df) 判断是否为空,是空的话置为True
- pd.notnull(df) 判断是否为空,不是空的话置为True
1 | #返回True,数据中存在缺失值 |
2.处理nan
删除含有缺失值的样本
- df.dropna( )
- axis=’row’ 默认按行
- inplace= (True:删除原始DataFrame缺失值样本,False:不改变原始数据,生成新的删除缺失值样本的数组,默认为False)
替换缺失值
- df.fillna(value,inplace=)
- value,替换成的值
- inplace= (True:删除原始DataFrame缺失值样本,False:不改变原始数据,生成新的删除缺失值样本的数组,默认为False)
1 | movie["Revenue (Millions)"].fillna(movie["Revenue (Millions)"].mean(),inplace=True) |
1.1.3 缺失值不为nan,有默认标记
1.替换?为np.nan
- df.replace(to_replace=”?”, value=np. nan)
2.处理np.nan
- 与nan值处理方式相同
二、数据离散化
2.1 定义及意义
定义:连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
意义:连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值
的个数。离散化方法经常作为数据挖掘的工具。
2.2 实现
2.2.1 分组
1.自动分组
- sr=pd.qcut(data,bins) 数据,组数
1 | data = pd.Series([165,174,160,180,159,163,192,184],index=['No1:165','No1:174','No1:160','No1:180','No1:159','No1:163','No1:192','No1:184']) |
2.自定义分组
- sr=pd.cut(data,[ ]) 数据,分组列表
1 | #自定义分组 |
3.将分组好的结果转换成one-hot编码
- pd.get_dummies(sr,prefix= )
三、合并
3.1 按方向拼接
pd.concat([data1, data2], axis=1)
- axis=0:按列拼接 纵向拼接
- axis=1:按行拼接 横向拼接
3.2 按索引拼接
pd.merge(left, right, how=”inner”, on=[索引])
- how=: left(左连接)、right(右连接)、outer(外连接)、inner(内连接)
1 | left=pd.DataFrame({"key1":["K0","K0","K1","K2"], |
四、交叉表与透视表
找到、探索两个变量之间的关系
4.1 使用crosstab(交叉表)实现
交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)
pd.crosstab(value1, value2)
1 | date.weekday |
4.2 透视表piovt_table
DataFrame.pivot_table([ ], index=[ ])
直接得到百分比
1 | stock.pivot_table(["pona"],index=["week"]) |
五、分组与聚合
5.1 DataFrame方法
DataFrame.groupby(key, as_ index=False)
key:分组的列数据,可以多个
注:分组并聚合后才能显示
1 | col = pd.DataFrame({'color':['white','red','green','red','green'], |
5.2 Series方法
Series.groupby(key, as_ index=False)
1 | #用Series方法 |
评论