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小程序分享
Dec 05 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python try except 捕获所有异常的实例
Oct 18 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
基于plt.title无法显示中文的快速解决
May 16 Python
Python如何实现定时器功能
May 28 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
Python 循环读取数据内存不足的解决方案
May 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
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
百度地图api如何使用
2015/08/03 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
基于Cesium绘制抛物弧线
2020/11/18 Javascript
python批量生成本地ip地址的方法
2015/03/23 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python实现图片识别汽车功能
2018/11/30 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
大学新生军训个人的自我评价
2013/10/03 职场文书
银行演讲稿范文
2014/01/03 职场文书
实验室标语
2014/06/21 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
公证处委托书
2015/01/28 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers