一、简单数据处理
- 我们拿到一个数据表,先看看它的列名
df.columns
- 取值
col = df.columns.values
col
我们有的时候需要直接取列名的索引,可是由上面的数据显示,有的有空格有的没有,当数据太多的时候我们不可能面面俱到,因此,我们需要统一去掉空格!去掉空格用strip()函数,但它一次只能处理一个函数,要想处理多个,用循环解决;
col[0].strip() #strip函数一次只能处理一个数据
[x.strip() for x in col]
#strip去除前后空格
二、重复值处理
检查重复值duplicated()
Duplicated函数功能:查找并显示数据表中的重复值
重复,返回True
这里需要注意的是:
当两条记录中所有的数据都相等时duplicated函数才会判断为重复值
duplicated支持从前向后(first),和从后向前(last)两种重复值查找模式
默认是从前向后进行重复值的查找和判断,也就是后面的条目在重复值判断中显示为True
df.duplicated() #返回布尔型数据,告诉重复值的位置
df.duplicated().sum()#说明有100个重复值
#查看重复的记录
df[df.duplicated()] #是以二维DF返回
- 删除重复值drop_duplicates()
drop_duplicates函数功能是:删除数据表中的重复值,判断标准和逻辑与duplicated函数一样
df.drop_duplicates(inplace=True)
#inplace=True表示直接在源数据上进行操作
df.shape
(5000,13)之前是5100,现在删除了10条重复值
判断是否删除重复值,可以用shape检查
三、异常值的处理(数值型)
df.describe().T
倒置
- 通常用三倍标准差判断是否是异常值
【定义】
https://wenku.baidu.com/view/c26cafc70c22590102029d75.html?qq-pf-to=pcqq.group
#找出'价格'异常值 三倍标准差判断异常值
sta=(df['价格']-df['价格'].mean())/df['价格'].std()
sta.abs()>3
df[sta.abs()>3] #大于3就为异常值
异常值还有价格和节省,我们知道理论上价格>节省
#找出'节省'异常值
df[df.节省>df.价格]
我们查找到的异常表进行连接,整合
pd.concat([df[df.节省>df.价格],df[sta.abs()>3]])
对其删除
delindex = pd.concat([df[df.节省>df.价格],df[sta.abs()>3]]).index
df.drop(delindex,inplace=True) #inplace指在原数集上更改
df.shape
(4996, 13)
四、缺失值处理
df.isnull() #查看缺失值
df.notnull() #查看不是缺失值的数据
df.dropna() #删除缺失值
df.fillna() #填补缺失值
查看缺失的条目
df.isnull().sum()
今天先以出发地为例:
7.2 总结缺失值处理常用步骤:
1、先调用以下一个查看是否有缺失值
df.isnull() #查看缺失值
df.notnull() #查看不是缺失值的数据
df.dropna() #删除缺失值
df.fillna() #填补缺失值
2、可以用df.isnull().sum()汇总缺失值的条目总数 【一般用这个】
3、开始进行缺失值处理
3.1 可以通过replace()替换方法换成0或者其他,也可以通过其它索引列取片赋值给缺失值 总言而之,就得把缺失值填补上
7.4 实操目的地
df[df.出发地.isnull()]
[str(x)[:2] for x in df.loc[df.出发地.isnull(),'路线名']] #变为字符串取出
['大连', '济南']
df.loc[df.出发地.isnull(),'出发地'] = [str(x)[:2] for x in df.loc[df.出发地.isnull(),'路线名']]
再次查看
df[df.出发地.isnull()]
df.出发地.isnull().sum()
0