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 爬虫多线程详解及实例代码
Oct 08 Python
快速了解Python相对导入
Jan 12 Python
使用Python更换外网IP的方法
Jul 09 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
Python理解递归的方法总结
Jan 28 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
python中的函数递归和迭代原理解析
Nov 14 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
python进行参数传递的方法
May 12 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
Matplotlib animation模块实现动态图
Feb 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
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
使用python绘制常用的图表
2016/08/27 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
python获取整个网页源码的方法
2020/08/03 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
高三英语教学反思
2014/01/13 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
家长对老师的评语
2014/04/18 职场文书
应届大学生自荐书
2014/06/17 职场文书
雷锋的故事观后感
2015/06/10 职场文书
债务追讨律师函
2015/06/24 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
golang switch语句的灵活写法介绍
2021/05/06 Golang
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏