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 sys.path详细介绍
Oct 17 Python
python如何查看系统网络流量的信息
Sep 12 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
Django实现快速分页的方法实例
Oct 22 Python
python+opencv实现动态物体识别
Jan 09 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python中is和==的区别详解
Nov 15 Python
python获取array中指定元素的示例
Nov 26 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
Anaconda详细安装步骤图文教程
Nov 12 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php长字符串定义方法
2012/07/12 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python json转字典字符方法实例解析
2020/04/13 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
医学生自我鉴定范文
2014/03/26 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
CentOS安装Nginx并部署vue
2022/04/12 Servers
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL