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编程入门的一些基本知识
May 13 Python
让Python代码更快运行的5种方法
Jun 21 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
Python-接口开发入门解析
Aug 01 Python
python cv2截取不规则区域图片实例
Dec 21 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 Python
Python读取和写入Excel数据
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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
利用python 下载bilibili视频
2020/11/13 Python
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
团购业务员岗位职责
2014/03/15 职场文书
南京南京观后感
2015/06/02 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB