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中使用全局日志时需要注意的问题
May 06 Python
Python中for循环控制语句用法实例
Jun 02 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
Python OpenCV获取视频的方法
Feb 28 Python
Python实现多条件筛选目标数据功能【测试可用】
Jun 13 Python
Django model反向关联名称的方法
Dec 15 Python
Python调用C语言的实现
Jul 26 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
django 外键创建注意事项说明
May 20 Python
python如何支持并发方法详解
Jul 25 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
深入探究node之Transform
2017/07/20 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
python处理json数据中的中文
2014/03/06 Python
python开发之文件操作用法实例
2015/11/13 Python
python模块之time模块(实例讲解)
2017/09/13 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python实现一个论文下载器的过程
2021/01/18 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
致标枪运动员加油稿
2014/02/15 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
如何正确理解python装饰器
2021/06/15 Python