python3常用的数据清洗方法(小结)


Posted in Python onOctober 31, 2019

首先载入各种包:

import pandas as pd
import numpy as np
from collections import Counter
from sklearn import preprocessing
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns 
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
sns.set(font='SimHei') # 解决Seaborn中文显示问题

读入数据:这里数据是编造的

data=pd.read_excel('dummy.xlsx')

本案例的真实数据是这样的:

python3常用的数据清洗方法(小结) 

对数据进行多方位的查看:

实际情况中可能会有很多行,一般用head()看数据基本情况

data.head() #查看长啥样
data.shape #查看数据的行列大小
data.describe()

python3常用的数据清洗方法(小结)

python3常用的数据清洗方法(小结)

#列级别的判断,但凡某一列有null值或空的,则为真
data.isnull().any()

#将列中为空或者null的个数统计出来,并将缺失值最多的排前
total = data.isnull().sum().sort_values(ascending=False)
print(total)


#输出百分比:
percent =(data.isnull().sum()/data.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)

python3常用的数据清洗方法(小结)

也可以从视觉上直观查看缺失值:

import missingno
missingno.matrix(data)
data=data.dropna(thresh=data.shape[0]*0.5,axis=1) #至少有一半以上是非空的列筛选出来
#如果某一行全部都是na才删除:
data.dropna(axis=0,how='all')

python3常用的数据清洗方法(小结)

#默认情况下是只保留没有空值的行
data=data.dropna(axis=0)

python3常用的数据清洗方法(小结)

#统计重复记录数
data.duplicated().sum()
data.drop_duplicates()

对连续型数据和离散型数据分开处理:

data.columns
#第一步,将整个data的连续型字段和离散型字段进行归类
id_col=['姓名']
cat_col=['学历','学校'] #这里是离散型无序,如果有序,请参考map用法,一些博客上有写
cont_col=['成绩','能力'] #这里是数值型
print (data[cat_col]) #这里是离散型的数据部分
print (data[cont_col])#这里是连续性数据部分

对于离散型部分:

#计算出现的频次
for i in cat_col:
  print (pd.Series(data[i]).value_counts())
  plt.plot(data[i])

python3常用的数据清洗方法(小结)

#对于离散型数据,对其获取哑变量
dummies=pd.get_dummies(data[cat_col])
dummies

python3常用的数据清洗方法(小结) 

对于连续型部分:

#对于连续型数据的大概统计:
data[cont_col].describe()

#对于连续型数据,看偏度,一般大于0.75的数值做一个log转化,使之尽量符合正态分布,因为很多模型的假设数据是服从正态分布的
skewed_feats = data[cont_col].apply(lambda x: (x.dropna()).skew() )#compute skewness
skewed_feats = skewed_feats[skewed_feats > 0.75]
skewed_feats = skewed_feats.index
data[skewed_feats] = np.log1p(data[skewed_feats])
skewed_feats
#对于连续型数据,对其进行标准化
scaled=preprocessing.scale(data[cont_col])
scaled=pd.DataFrame(scaled,columns=cont_col)
scaled

python3常用的数据清洗方法(小结)

m=dummies.join(scaled)
data_cleaned=data[id_col].join(m)
data_cleaned

python3常用的数据清洗方法(小结) 

看变量之间的相关性:

data_cleaned.corr()

python3常用的数据清洗方法(小结)

#以下是相关性的热力图,方便肉眼看
def corr_heat(df):
  dfData = abs(df.corr())
  plt.subplots(figsize=(9, 9)) # 设置画面大小
  sns.heatmap(dfData, annot=True, vmax=1, square=True, cmap="Blues")
  # plt.savefig('./BluesStateRelation.png')
  plt.show()
corr_heat(data_cleaned)

python3常用的数据清洗方法(小结)

如果有觉得相关性偏高的视情况删减某些变量。

#取出与某个变量(这里指能力)相关性最大的前四个,做出热点图表示
k = 4 #number of variables for heatmap
cols = corrmat.nlargest(k, '能力')['能力'].index
cm = np.corrcoef(data_cleaned[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f',   annot_kws={'size': 10}, yticklabels=cols.values,  xticklabels=cols.values)
plt.show()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
Python多进程同步简单实现代码
Apr 27 Python
Python分治法定义与应用实例详解
Jul 28 Python
Python线程创建和终止实例代码
Jan 20 Python
python实现简单登陆流程的方法
Apr 22 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
python字符串拼接+和join的区别详解
Dec 03 Python
Python绘制分类图的方法
Apr 20 Python
python实战之90行代码写个猜数字游戏
Apr 22 Python
Django实现网页分页功能
Oct 31 #Python
8段用于数据清洗Python代码(小结)
Oct 31 #Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 #Python
python实现大量图片重命名
Mar 23 #Python
python3图片文件批量重命名处理
Oct 31 #Python
Django1.11自带分页器paginator的使用方法
Oct 31 #Python
python实现批量文件重命名
Oct 31 #Python
You might like
php增删改查示例自己写的demo
2013/09/04 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
华为慧通笔试题
2016/04/22 面试题
sealed修饰符是干什么的
2012/10/23 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
电钳专业个人求职信
2014/01/04 职场文书
生产部岗位职责范文
2014/02/07 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
医院护士工作检讨书
2014/10/26 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
民间借贷借条如何写
2015/05/26 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书