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操作xml文件详细介绍
Jun 09 Python
python实现的简单猜数字游戏
Apr 04 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python实现抖音视频批量下载
Jun 20 Python
Django csrf 验证问题的实现
Oct 09 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
Python OrderedDict字典排序方法详解
May 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编写一个简单的路由类
2011/04/13 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
PHP图片水印类的封装
2017/07/06 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
详解vue中组件参数
2018/07/09 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
python批量赋值操作实例
2018/10/22 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
什么是封装
2013/03/26 面试题
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
预备党员个人总结
2015/02/14 职场文书
解除合同协议书范本
2016/03/21 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
python处理json数据文件
2022/04/11 Python