Pandas数据处理

pandas对象中的数据可以通过一些内置的方式进行合并:
pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。
pandas.concat可以沿着一条轴将多个对象堆叠到一起。
默认情况下merge做的是’inner’连接,其他方式还有’left’、‘right’、‘outer’

df1=pd.DataFrame({'key':['b','b','a','c','a','b'],'data1':range(6)})
df2=pd.DataFrame({'key':['a','b','a','b','d'],'data2':range(5)})

在这里插入图片描述
多对多连接产生的是行的笛卡儿积,左边DataFrame有3个’b’行,右边有2个,最终结果中就有6个’b’行

pd.merge(df1,df2,on='key',how='left')

在这里插入图片描述
要根据多个键进行合并,传入一个由列名组成的列表即可

left=pd.DataFrame({'key1':['foo','foo','bar'],'key2':['one','two','one'],'lval':[1,2,3]})
right=pd.DataFrame({'key1':['foo','foo','bar','bar'],'key2':['one','one','one','two'],'rval':[4,5,6,7]})

在这里插入图片描述
可以理解为多个键形成一系列元组,并将其当作单个连接键

pd.merge(left,right,on=['key1','key2'],how='outer')

在这里插入图片描述
merge的suffixes选项用于指定附加到左右两个DataFrame对象的重叠列名上的字符串

pd.merge(left,right,on='key1',suffixes=('_left','_right'))

在这里插入图片描述

merge函数的参数
参数 说明
how ‘inner’、’outer’、‘left’、’right‘,默认为’inner’
left_on 左侧DataFrame中用作连接键的列
right_on 右侧DataFrame中用作连接键的列
left_index 将左侧的行索引用作其连接键
right_index 类似于left_index
sort 根据连接键对合并后的数据进行排序,默认为True
suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(’_x’,’_y’
copy 设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是复制
索引上的合并

DataFrame中的连接键位于其索引中,可以传入left_index=True或right_index=True以说明索引应该被用作连接键

left1=pd.DataFrame({'key':['a','b','a','a','b','c'],'value':range(6)})
right1=pd.DataFrame({'group_val':[3.5,7]},index=['a','b'])

在这里插入图片描述

pd.merge(left1,right1,left_on='key',right_index=True,how='inner')

在这里插入图片描述
DataFrame还有一个join实例方法,

left1.join(right,on='key',how='inner')

在这里插入图片描述

轴向连接

pandas的concat函数可以将值和索引粘合在一起,默认情况下,concat是在axis=0上工作的,最终产生一个新的Series。传入axis=1,则结果就会变成一个DataFrame(axis=1是列)

s1=pd.Series([0,1],index=['a','b'])
s2=pd.Series([2,3,4],index=['c','d','e'])
pd.concat([s1,s2])
pd.concat([s1,s2],axis=1,sort=True)

在这里插入图片描述
想要在连接轴上创建一个层次化索引,使用keys参数可以达到这个目的

result=pd.concat([s1,s2],keys=['one','tow'])

在这里插入图片描述
如果沿着axis=1对Series进行合并,则keys就会成为DataFrame的列头

pd.concat([s1,s2],axis=1,keys=['one','two'],sort=True)

在这里插入图片描述
同样的逻辑对DataFrame对象一样

pd.concat([data1,data1])
pd.concat([data1,data1],axis=1,keys=['level1','level2'],names=['upper','年份'])

在这里插入图片描述
concat函数的参数

参数 说明
axis 指明连接的方向
join inner、outer,默认outer,指明其他轴向上的索引是按交集还是并集进行合并
keys 用于形成连接轴上的层次化索引,可以是任意值的列表或数组、元组数组、数组列表
levels 指定用作层次化索引各级别上的索引,如果设置了keys的话
names 用于创建分层级别的名称,如果设置了keys和levels的话
verify_integrity 检查结果对象新轴上的重复情况,如果发现则引发异常,默认False允许重复
ignore_index 不保留连接轴上的索引,产生一组新索引
合并重叠数据

combine_first用参数对象中的数据为调用者对象的缺失数据打补丁

df1 = pd.DataFrame({'a':[1,np.nan,5,np.nan],'b':[np.nan,2,np.nan,6],'c':range(2,18,4)})
df2 = pd.DataFrame({'a':[5,4,np.nan,3,7],'b':[np.nan,3,4,6,8]})

在这里插入图片描述

df1.combine_first(df2)

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐