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写asp详细讲解
Dec 16 Python
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
python2.x实现人民币转大写人民币
Jun 20 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
Django实现图片上传功能步骤解析
Apr 22 Python
Python+DeOldify实现老照片上色功能
Jun 21 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
php curl选项列表(超详细)
2013/07/01 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
JS & JQuery 动态添加 select option
2016/06/08 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Python进程间通信用法实例
2015/06/04 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
采购文员岗位职责
2013/11/20 职场文书
法律专业求职信
2014/05/24 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
倡议书的写法
2014/08/30 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2014年财务部工作总结
2014/11/11 职场文书
党员自评材料范文
2014/12/17 职场文书
道歉信怎么写
2015/05/12 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL