PART1:导入数据之后的查看数据情况的一些常用操作:
- 预览数据前几行
- 查看数据表尺寸大小
- 获取数据类型
- 获取数值分布情况
PART2:数据预处理
- 缺失值处理-删除或填充
- 重复值处理
- 异常值检测和处理
- 数据类型转换
- 索引设置
----------------------------------PART1----------------------------------------------------
1.预览数据的前几行-head(),默认前五行,表示自定义看几行
2.查看数据表的大小,即多少行多少列-.shape,注意是.shape不是shape(),行列索引不计数
3.获取数据类型-info( )
4.获取数值分布情况-describe( ),所有数值类型字段的分布值
此处由于只有年龄列是数值型,所以只显示年龄列的数值分布情况,可以自建一个多数据列的DateFrame,看看describe的结果如何
----------------------------------PART2-------------------------------------
1.缺失值处理-查看缺失值、删除缺失值、填充缺失值
---------查看缺失值---------
excel中查看缺失值的方式有两种:一种是选中列查看右下角的计数值;另一种是利用定位条件(ctrl+G),利用空格进行定位
python中也有两种方式:一种是用.info()获取数据类型时会显示各列非空值个数;另一种是用isnull()来返回boolean类型来显示表数据中数据为空的位置
这里我在原始excel数据表中把性别列的第二个数据删掉为空了
---------删除缺失值---------
excel中直接选中缺失值,右键删除即可,但删除的是缺失值所在的整行数据;
python中删除空值有2种情况:一种空白值只出现在某些行的某些地方,并非一整行全是空值,采用的是dropna()方法,默认删除含有缺失值的行,也是直接把缺失值所在的一整行全部删掉了;第二种是删除空白行,方法是传入how=all参数,这样就只会删除全为空值的行,不全为空值的行就不会被删除,因此结果中有些行仍旧会含有空值。
新建一个含有空行的DateFrame
删除空行之后的结果显示
---------填充缺失值---------
缺失数据不超过30%,则尽量不删除,而采用填充的方式。填充可以是数字0、平均值、众数等
情况一:全部填充一样的数字,假设填充的是数字0
在excel中先使用定位条件定位到所有的缺失值,再在第一个缺失值的单元格填入数字0,再按ctrl+enter键填充0;
python中使用fillna(0);
就是在上面自建的那个表格的基础上操作的
情况二:不同列填充不一样的值
excel中单独选中某一列中所有的空值,再用类似全填充的方式填充;
python中指定列名,用字典的方式,也可指定多个列名
2.重复值处理-一般直接做删除处理
这个有点意思,我还花了点时间思考琢磨了一下结果。我以为是只要有重复的就会被删掉。
drop_duplicates()---首先是列全选,其次就是删除两行所有列值相同的,下面这里就是2、3行的编号、客户姓名、唯一识别码和成交时间都一样,所以删除了其中的一行,默认保留的是第一个重复的值;
drop_duplicates(subset=["客户姓名","唯一识别码"])---删除所有行中x列和y列对应的行值重复的行。这里就是对比所有行中客户姓名列和唯一识别码列相同的,这里2和3的客户姓名和唯一识别码是一样的,其次就是4和5对应的客户姓名和唯一识别码也是一样的,因此删掉的是索引为3、5的行;同时可传入参数keep="last"或者"first"或者False来设置保留的是第一个重复的值还是最后一个重复的值,还是全部删除;
这就是重复的全部删除的情况
3.异常值的检测和处理
---------检测异常值---------
发现异常值的三种方式:
方式1-根据业务经验划定不同指标的正常范围,超过该范围的值就是异常值;
方式2-通过绘制箱线图,把大于(小于)箱型图上边缘(下边缘)的点称为异常值;
方式3-服从正态分布的数据可使用3-sigmoid原则,如果一个数值与平均值之间的偏差超过3倍标准差,则这个值就被认为是异常的;
---------处理异常值---------
处理异常值的几种方式:
方式1-先筛选出异常值,再进行删除;
方式2-对异常值进行填充;
4.数据类型转换
---------Pandas中的常见数据类型---------
int-整型数
float-浮点数,即含有小数点的数
object-对象类型,用O表示
string-字符串类型,用S表示,S10表示长度为10的字符串
unicode-固定长度的unicode类型,跟字符串定义方式一样
datetime64[ns]-时间格式
---------查看数据类型---------
info-查看全部的数据类型
dtype-查看某一列的数据类型
---------转换数据类型---------
astype("新的数据类型")
5.索引设置
如果原始数据没有索引,则加载到python之后默认是以数字作为索引,而且是从0开始的;
---------设置行索引---------index=[ ]
---------设置列索引---------columns=[ ]
---------重新设置索引---------
set_index()
当传入多个值时可设置层次化索引,在列中含有多个重复值时比较多使用;
---------重命名索引---------
rename(index={},columns={})
---------重置索引---------
主要用在层次化索引表中,重置索引是将索引当作一个columns进行返回。
reset_index(level=None,drop=False,inplace=False),如果没有参数,则默认为全部索引,即默认把索引全部转换为columns。
level-指定要将层次化索引的第几级别转化为columns,第一个索引为0级,第二个索引为1级;
drop-指定是否将原索引删掉,即不作为一个新的columns,默认为False,即不删除原索引;
inplace-指定是否修改原数据表;
我自己用了一点方式让它符合书中的样子再继续操作:
操作了一下使数据是分层索引的形式
默认全部恢复成数据列
将索引0列恢复成数据列
这里直接将原索引Z1和Z2列删掉了