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实现类似ftp传输文件的网络程序示例
Apr 08 Python
python通过shutil实现快速文件复制的方法
Mar 14 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
MATLAB数学建模之画图汇总
Jul 16 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
python小型的音频操作库mp3Play
Apr 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
php公用函数列表[正则]
2007/02/22 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
Python中的filter()函数的用法
2015/04/27 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Scrapy的简单使用教程
2017/10/24 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
python是否适合网页编程详解
2019/10/04 Python
Python urllib2运行过程原理解析
2020/06/04 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
西安交大自主招生自荐信
2014/01/27 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
学生检讨书怎么写
2014/10/09 职场文书
感谢信范文大全
2015/01/23 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
详解Redis瘦身指南
2021/05/26 Redis
python 爬取吉首大学网站成绩单
2021/06/02 Python