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连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
Python带动态参数功能的sqlite工具类
May 26 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
jupyter notebook实现显示行号
Apr 13 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python 无限级分类树状结构生成算法的实现
Jan 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
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP实现微信发红包程序
2015/08/24 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
详解redux异步操作实践
2018/08/15 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
详解Python中DOM方法的动态性
2015/04/11 Python
Python实现二维有序数组查找的方法
2016/04/27 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
最小二乘法及其python实现详解
2020/02/24 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
学校办公室主任职责
2013/12/27 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
安全生产标语大全
2014/10/06 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
教师岗位说明书
2015/09/30 职场文书
创业计划书之外语培训班
2019/11/02 职场文书