概述
因为公司的服务器没有R,所以R现在只能是单机玩家;为了处理更大体量的数据,开始看看python。
据说python有SQL相关的包,还有之前随便看的beautifulsoup的爬虫,可以说python可以做的事情太多了。但是首先focus on数据分析,这块和R可以对比着看,看看两种语言的逻辑和差异。最近在看《利用python进行数据分析》,据说是pandas的创始人写的,实话实说,这本书的可读性较《R语言实战》差,也就是说没有一种边学边用的感觉,这也和语言本身很像。因为R中有很多包里面就有自带的数据集和help文件,当然python也有,但是没有R这么直观。
另外顺便说一下,pycharm可以最大化的模拟R studio的操作环境,是一个不可多得的好的编辑器和控制台。
最最开始当然就是载入包了,这个和R中的library非常类似,通常情况下,py的数据分析是numpy和pandas两个:
import pandas as pd
import numpy as np
当然,这两个包是基础的数据分析包,py有个特点,就是在这个包中的函数都需要用函数名+.来判断,比如
pd.merge(df1,df2)
这个函数就是应用pd(pandas)包中的merge函数,这块和R中有所区别,R中有的时候包中的函数名称重复,最多会有个warning,说某一个函数被mask了,而python会严格的遵守不重复的规定。
同时,如果需要直接导入global函数,可以用如下的参数:
from pandas import Series,DataFrame
也就是从pandas包中导入Series和Dataframe函数,这两个分别对应R中的c和data.frame,也就是向量和数据框,从这点来说R和py还是比较一致的。
当然,国际惯例,从向量开始
s1=Series(range(6))
s1就是我们的第一个向量,看看长什么样:
s1
0 0
1 1
2 2
3 3
4 4
5 5
dtype: int32
这个表达形式和R中略有不同,但是其实都是一个东西,而且下面还有dtype,也就是数据类型,这里是整数。
如果需要抽取某一个值,和R中一样,用方括号括起来:
s1[1]
1
顺便说一下,range的函数就是R的1:n,比如range(5)就是[0,1,2,3,4],注意的是py从0开始,而R是从1开始的。
其他的向量没什么好说的,还是数据框应用的最广,而且更为复杂。
建立一个数据框和R也很类似,但是稍微麻烦点,比如:
df1=DataFrame({'key':['b','b','a','c','a','a','b'],
'data':range(7)})
df2=DataFrame({'key':['a','b','d'],
'data2':range(3)})
其中的key和data就是列名(colnames),里面的就是值了,看下这两个df:
df1
data key
0 0 b
1 1 b
2 2 a
3 3 c
4 4 a
5 5 a
6 6 b
df2
data2 key
0 0 a
1 1 b
2 2 d
如果我想要合并这两个数据框:
pd.merge(df1,df2)
data key data2
0 0 b 1
1 1 b 1
2 6 b 1
3 2 a 0
4 4 a 0
5 5 a 0
这个逻辑就比较诡异了,py首先会找合并的两个数据框中重合的key,取交集,类似于键之间inner join,然后左边就是df1,右边就是df2,如果innerjoin不上的话,就是0;所以理论上谁在前谁在后都是一样的,比如
pd.merge(df2,df1)
data2 key data
0 0 a 2
1 0 a 4
2 0 a 5
3 1 b 0
4 1 b 1
5 1 b 6
一般情况下,需要制定join的字段,如:
pd.merge(df1,df2,on='key')
这个结果和之前一样,如果不这样,以数字为key进行join的话:
pd.merge(df1,df2,left_on='data',right_on='data2')
data key_x data2 key_y
0 0 b 0 a
1 1 b 1 b
2 2 a 2 d
其中如果join的值中相等,比如本例中都是key,那么,会有一个是key_x,一个是key_y,逻辑上还是df1和df2的交集是[0,1,2],左边是bba,右边是a,b,d;
这个merge函数的默认是inner join,还有left join和right join,甚至还有outer join,比如:
pd.merge(df1,df2,on='key',how='left')
data key data2
0 0 b 1.0
1 1 b 1.0
2 2 a 0.0
3 3 c NaN
4 4 a 0.0
5 5 a 0.0
6 6 b 1.0
这个就非常类似SQL的leftjoin了;
再来看一个outer的:
pd.merge(df1,df2,on='key',how='outer')
data key data2
0 0.0 b 1.0
1 1.0 b 1.0
2 6.0 b 1.0
3 2.0 a 0.0
4 4.0 a 0.0
5 5.0 a 0.0
6 3.0 c NaN
7 NaN d 2.0
这个相当于key取并集,能join上的就join,join不上就NaN。
还有一种merge是类似SQL的:
sheet a join sheet b
on a.x1=b.x1
and a.y1=b.y1
也就是两个作为join的连接键:
df3=DataFrame({'key':['b','b','a','c','a','a','b'],
'data':range(7),
'join1':range(7,14)})
df4=DataFrame({'key':['a','b','d'],
'data':range(3),
'join2':range(3,6)})
pd.merge(df3,df4,on=['key','data'],how='inner')
得出join出来的结果是:
data join1 key join2
0 1 8 b 4
最后
以上就是辛勤天空为你收集整理的【python学习笔记】Dataframe和类SQL的merge函数(一)的全部内容,希望文章能够帮你解决【python学习笔记】Dataframe和类SQL的merge函数(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复