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面向对象编程中的类和对象学习教程
Mar 30 Python
Python简单连接MongoDB数据库的方法
Mar 15 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
详解Python打包分发工具setuptools
Aug 05 Python
python实现网站微信登录的示例代码
Sep 18 Python
pycharm 对代码做静态检查操作
Jun 09 Python
python suds访问webservice服务实现
Jun 26 Python
python实现学生管理系统开发
Jul 24 Python
Python接口自动化测试的实现
Aug 28 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
HTML的select控件美化
2017/03/27 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python数据结构之链表的实例讲解
2017/07/25 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
出国留学介绍信
2014/01/13 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
园林技术专业求职信
2014/07/28 职场文书
个人授权委托书范文
2014/09/21 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
2014年药房工作总结
2014/11/22 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
具结保证书范本
2015/05/11 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP