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中mechanize库的简单使用示例
Jan 10 Python
python调用新浪微博API项目实践
Jul 28 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
Python统计时间内的并发数代码实例
Dec 28 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
Flask response响应的具体使用
Jul 15 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
Terran兵种介绍
2020/03/14 星际争霸
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php中使用url传递数组的方法
2015/02/11 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
JavaScript 学习 - 提高篇
2007/02/02 Javascript
javascript编程起步(第三课)
2007/02/27 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python如何修改装饰器中参数
2018/03/20 Python
python仿抖音表白神器
2019/04/08 Python
python配置文件写入过程详解
2019/10/19 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
校园联欢晚会主持词
2014/03/17 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis