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中OrderedDict的使用方法详解
May 05 Python
python实现list由于numpy array的转换
Apr 04 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python3中详解fabfile的编写
Jun 24 Python
Python基础教程之异常详解
Jan 10 Python
Python之时间和日期使用小结
Feb 14 Python
Django框架模板的使用方法示例
May 25 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
python正则表达式之对号入座篇
2018/07/24 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
最新奶茶店创业计划书
2014/01/25 职场文书
保健品市场营销方案
2014/03/31 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
三好学生事迹材料
2014/12/24 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
python创建字典及相关管理操作
2022/04/13 Python