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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
Python get获取页面cookie代码实例
Sep 12 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
Python描述符descriptor使用原理解析
Mar 21 Python
运行Python编写的程序方法实例
Oct 21 Python
Python使用永中文档转换服务
May 06 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简单实现冒泡排序的方法
2016/12/26 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
webpack 2的react开发配置实例代码
2017/07/28 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
python实现按行切分文本文件的方法
2016/04/18 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
集团薪酬管理制度
2014/01/13 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
应聘护士求职信
2014/07/21 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python