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中对list去重的多种方法
Sep 18 Python
Python下线程之间的共享和释放示例
May 04 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
简述Python2与Python3的不同点
Jan 21 Python
Django开发中复选框用法示例
Mar 20 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
Python如何将字符串转换为日期
Jul 31 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 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
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
php格式文件打开的四种方法
2018/02/24 PHP
phpwind放自动注册方法
2006/12/02 Javascript
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
JS跨域总结
2012/08/30 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
如何从零开始手写Koa2框架
2019/03/22 Javascript
Python运算符重载用法实例分析
2015/06/01 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
毕业生个人投资创业计划书
2014/01/04 职场文书
项目合作协议书范本
2014/04/16 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS