源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

python 数据清洗之数据合并、转换、过滤、排序

  • 时间:2020-04-20 23:26 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python 数据清洗之数据合并、转换、过滤、排序
前面我们用pandas做了一些基本的操作,接下来进一步了解数据的操作, 数据清洗一直是数据分析中极为重要的一个环节。 [b]数据合并[/b] 在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)
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090133_0_12047.png[/img]
print(data2) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090133_1_87514.png[/img]
print(pd.merge(data1,data2)) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090134_2_66262.png[/img] 可以看到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'))
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090134_3_57560.png[/img] 两个数据框中如果列名不同的情况下,我们可以通过指定letf_on 和right_on两个参数把数据连接在一起
print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left')) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090135_4_39520.png[/img] 其他详细参数说明 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090135_5_56406.png[/img] [b]重叠数据合并[/b] 有时候我们会遇到重叠数据需要进行合并处理,此时可以用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))
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090135_6_4758.png[/img] 可以看到相同标签下的内容优先显示data3的内容,如果一个数据框中的某一个数据是缺失的,此时另外一个数据框中的元素就会补上 这里的用法类似于np.where(isnull(a),b,a) [b]数据重塑和轴向旋转[/b] 这个内容我们在上一篇pandas文章有提到过。数据重塑主要使用reshape函数,旋转主要使用unstack和stack两个函数。
data=pd.DataFrame(np.arange(12).reshape(3,4),
       columns=['a','b','c','d'],
       index=['wang','li','zhang'])
print(data)
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090136_7_41883.png[/img]
print(data.unstack()) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090136_8_9225.png[/img] [b]数据转换[/b] 删除重复行数据
data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data)
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090137_9_10536.png[/img]
print(data.duplicated()) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090137_10_12615.png[/img] 可以看出第三行是重复第二行的数据所以,显示结果为True 另外用drop_duplicates方法可以去除重复行
print(data.drop_duplicates()) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090137_11_98905.png[/img] [b]替换值[/b] 除了使用我们上一篇文章中提到的fillna的方法外,还可以用replace方法,而且更简单快捷
data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data.replace(1,2))
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090138_12_60961.png[/img] 多个数据一起换
print(data.replace([1,4],np.nan)) 
[img]http://img.1sucai.cn/uploads/article/2018010709/20180107090138_13_34189.png[/img] [b]数据分段[/b]
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))) 
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090139_14_92384.png[/img] 显示每个分段值得个数 此外还有一个qcut的函数可以对数据进行4分位切割,用法和cut类似。 [b]排列和采样[/b] 我们知道排序的方法有好几个,比如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)
结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090139_15_35017.png[/img] print(samp) 结果为: [1 0 2] print(df.take(samp)) 结果为: [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090140_16_58854.png[/img] 这里使用take的结果是,按照samp的顺序从df中提取样本。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部