python 数据清洗之数据合并、转换、过滤、排序


Posted in Python onFebruary 12, 2017

前面我们用pandas做了一些基本的操作,接下来进一步了解数据的操作,
数据清洗一直是数据分析中极为重要的一个环节。

数据合并

在pandas中可以通过merge对数据进行合并操作。

import numpy as np
import pandas as pd
data1 = pd.DataFrame({'level':['a','b','c','d'],
         'numeber':[1,3,5,7]})

data2=pd.DataFrame({'level':['a','b','c','e'],
         'numeber':[2,3,6,10]})
print(data1)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(data2)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(pd.merge(data1,data2))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

可以看到data1和data2中用于相同标签的字段显示,而其他字段则被舍弃,这相当于SQL中做inner join连接操作。
此外还有outer,ringt,left等连接方式,用关键词how的进行表示。

data3 = pd.DataFrame({'level1':['a','b','c','d'],
         'numeber1':[1,3,5,7]})
data4=pd.DataFrame({'level2':['a','b','c','e'],
         'numeber2':[2,3,6,10]})
print(pd.merge(data3,data4,left_on='level1',right_on='level2'))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

两个数据框中如果列名不同的情况下,我们可以通过指定letf_on 和right_on两个参数把数据连接在一起

print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

其他详细参数说明

python 数据清洗之数据合并、转换、过滤、排序

重叠数据合并

有时候我们会遇到重叠数据需要进行合并处理,此时可以用comebine_first函数。

data3 = pd.DataFrame({'level':['a','b','c','d'],
         'numeber1':[1,3,5,np.nan]})
 data4=pd.DataFrame({'level':['a','b','c','e'],
         'numeber2':[2,np.nan,6,10]})
 print(data3.combine_first(data4))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

可以看到相同标签下的内容优先显示data3的内容,如果一个数据框中的某一个数据是缺失的,此时另外一个数据框中的元素就会补上

这里的用法类似于np.where(isnull(a),b,a)

数据重塑和轴向旋转

这个内容我们在上一篇pandas文章有提到过。数据重塑主要使用reshape函数,旋转主要使用unstack和stack两个函数。

data=pd.DataFrame(np.arange(12).reshape(3,4),
       columns=['a','b','c','d'],
       index=['wang','li','zhang'])
print(data)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(data.unstack())

结果为:

python 数据清洗之数据合并、转换、过滤、排序

数据转换

删除重复行数据

data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(data.duplicated())

结果为:

python 数据清洗之数据合并、转换、过滤、排序

可以看出第三行是重复第二行的数据所以,显示结果为True

另外用drop_duplicates方法可以去除重复行

print(data.drop_duplicates())

结果为:
python 数据清洗之数据合并、转换、过滤、排序

替换值

除了使用我们上一篇文章中提到的fillna的方法外,还可以用replace方法,而且更简单快捷

data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data.replace(1,2))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

多个数据一起换

print(data.replace([1,4],np.nan))

python 数据清洗之数据合并、转换、过滤、排序

数据分段

data=[11,15,18,20,25,26,27,24]
bins=[15,20,25]
print(data)
print(pd.cut(data,bins))

结果为:
[11, 15, 18, 20, 25, 26, 27, 24][NaN, NaN, (15, 20], (15, 20], (20, 25], NaN, NaN, (20, 25]]
Categories (2, object): [(15, 20] < (20, 25]]

可以看出分段后的结果,不在分段内的数据显示为na值,其他则显示数据所在的分段。

print(pd.cut(data,bins).labels)

结果为:

[-1 -1 0 0 1 -1 -1 1]

显示所在分段排序标签

print(pd.cut(data,bins).levels)

结果为:

Index([‘(15, 20]', ‘(20, 25]'], dtype='object')

显示所以分段标签

print(value_counts(pd.cut(data,bins)))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

显示每个分段值得个数

此外还有一个qcut的函数可以对数据进行4分位切割,用法和cut类似。

排列和采样

我们知道排序的方法有好几个,比如sort,order,rank等函数都能对数据进行排序
现在要说的这个是对数据进行随机排序(permutation)

data=np.random.permutation(5)
print(data)

结果为:

[1 0 4 2 3]

这里的peemutation函数对0-4的数据进行随机排序的结果。
也可以对数据进行采样

df=pd.DataFrame(np.arange(12).reshape(4,3))
samp=np.random.permutation(3)
print(df)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(samp)

结果为:
[1 0 2]

print(df.take(samp))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

这里使用take的结果是,按照samp的顺序从df中提取样本。

Python 相关文章推荐
python网络编程学习笔记(10):webpy框架
Jun 09 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
Python SQLite3简介
Feb 22 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
Python基于mysql实现学生管理系统
Feb 21 Python
使用Python将Mysql的查询数据导出到文件的方法
Feb 25 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
PyTorch中permute的使用方法
Apr 26 Python
python3制作捧腹网段子页爬虫
Feb 12 #Python
python日志记录模块实例及改进
Feb 12 #Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 #Python
使用Python绘制图表大全总结
Feb 11 #Python
Python 绘图和可视化详细介绍
Feb 11 #Python
Python实现多线程HTTP下载器示例
Feb 11 #Python
Python  pip安装lxml出错的问题解决办法
Feb 10 #Python
You might like
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
js对象与打印对象分析比较
2013/04/23 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
Python版的文曲星猜数字游戏代码
2013/09/02 Python
浅谈Python处理PDF的方法
2017/11/10 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
详解python中sort排序使用
2019/03/23 Python
Django 开发环境配置过程详解
2019/07/18 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
应聘自荐书
2013/10/08 职场文书
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
护士自我评价
2014/02/01 职场文书
工程采购员岗位职责
2014/03/09 职场文书
《观舞记》教学反思
2014/04/16 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
课外活动总结
2015/02/04 职场文书
安全学习心得体会范文
2016/01/18 职场文书
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers