常见不规整数据主要有:
- 缺失数据
- 重复数据
- 异常数据
1. 缺失值处理
1.1 缺失值查看
Python缺失值一般用NaN表示。
- info():可返回每一列的缺失情况。
- isnull():判断哪个值是缺失值。如果是缺失值,则返回True。
1.2 缺失值删除
- dropna():默认删除有缺失值的行。 只要一行有缺失值,就把整行的值删掉。
dropna(how = “all”):删除空白行,只会删除全为空值的行。
1.3 缺失值填充
一般情况下,只要缺失数据比例不过高,即不超过30%,尽量不删除,而是选择填充。
- df.fillna({“列1”:“填充值1”, “列2”:“填充值2”}):对数据表中的所有缺失值进行填充。
2. 重复值处理
- drop_duplicates():默认删除重复值, 且保留第一个(行)的值。
drop_duplicates(subset = “列1”):只删除列1的重复值。
drop_duplicates(subset = [“列1”, “列2”,“列3”],keep = first):删除多列重复值, 列名以列表的形式传给参数subset。
keep:自定义删除重复项时保留哪个。- first:默认值,保留第一个。
- last:保留最后一个。
- False:把重复值全部删除。
3. 异常值的检测与处理
异常值,就是相比正常值而言,过高或过低的数据。 比如人的年龄是0岁或者150,都是异常值,因为与实际情况差距很大。
3.1 异常值检测(p82)
- 根据业务经验,划定不同指标的正常范围,超过该范围的值,算作异常值。
- 通过绘制箱型图,把大于箱型图的上边缘,以及小于箱型图下边缘的点,称为异常值。
- 如果数据服从正态分布,则可以利用3δ原则;如果一个值与平均值之间的偏差超过3倍的标准差,那么我们就认为这个值为异常值。
3.2 异常值处理
- 最常用的处理方式:删除。
- 把异常值当缺失值填充。
先把异常值筛选出来, 然后用replace()替换。 - 把异常值当特殊情况, 研究出异常值出现的原因。
4. 数据类型转换
4.1 数据类型
Python主要有6种数据类型。
类型 | 说明 |
---|---|
int | 整型数,即整数 |
float | 浮点数,即含有小数点的数 |
object | Python对象类型,用O表示 |
string_ | 字符串类型,经常用S表示。 S10,表示长度为10的字符串。 |
unicode_ | 固定长度的unicode类型,跟字符串定义方式一样。 |
datetime64[ns] | 表示时间格式 |
查看数据类型的方式:
- info():获取每一列的数据类型。
- dtype():获取某一列数据类。
Sample:df["A"].dtype
,查看A列的类型
4.2 类型转换
- astype():对数据类型进行转换。
Sample:df["A"].astype("float64")
,将A列的数据类型准换成float。
5. 索引设置
索引是查找数据的依据,设置索引的目的,是便于我们查找数据。
5.1 为无索引表添加索引
df.columns = ["A","B","C","D"]
:为df表添加列索引df.index = [0,1,2,3,4]
:为df表添加行索引
5.2 重新设置索引
- df.set_index(“A”):用A列作为索引列。
层次化索引:给set_index()传入多个列名,一个表中用多列做索引的方式称为层次化索引。
5.3 重命名索引
- df.rename(columns = {“旧名1”:“新名1”, “旧名2”:“新名2”},index = {“旧名1”:“新名1”, “旧名2”:“新名2”}):新旧名用键值对表示。
5.4 重置索引
重置索引,主要用在层次化索引表中,是将索引当作一个columns进行返回,变成常规列。
df.rest_index(level =None,drop = False, inplace = False)
- level:指定要将层次化索引的第几级别转化为columns。第一个索引为0级。
- drop:指定是否将原索引删掉,即不作为新的columns。默认是False,即不删除原索引。
- inplace:用来指定是否修改原数据表。
Sample:
- df.reset_index():默认将所有index转化成columns。
- df.reset_index(level= 0):将第0级索引转化为columns。
- df.reset_index(drop = True):将原索引删除, 不加入columns。