Pandas_联合与合并数据集

merge函数

'''
merge函数:
参数	          说明
left	    参与合并的左侧DataFrame
right	    参与合并的右侧DataFrame
how	        “inner”,“outer(并集)”,“left”,“right"其中之一,默认为"inner”
on	        用于连接的列名,必须存在于左右两个DataFrame,如果不指定会自动找一个重叠的列
left_on	    左侧DataFrame中用作连接键的列
right_on	右侧DataFrame中用作连接键的列
left_index	是否将左侧的行索引用作其连接键
right_index	是否将右侧的行索引用作其连接键
sort	    根据连接键对合并后的数据进行排列,默认为True
suffixes	字符串值元组,用于追加到重叠列名的末尾,默认为(’_x’,‘_y’)。如果左右两个DataFrame对象都有“data”,
            则结果就会出现“data_x”和“data_y”
copy	    默认为True。如果设置为False,可以避免将数据复制到结果数据结构中
'''
frame1=pd.DataFrame({
    'a':range(5),
    'b':range(5,0,-1),
    'c':list('aaabb'),
    'd':[1,1,1,2,2]
})
frame2=pd.DataFrame({
    'a':range(6),
    'e':range(6,0,-1),
})
new_frame=pd.merge(frame1,frame2,on='a',how='outer')
print(new_frame)
'''
   a    b    c    d  e
0  0  5.0    a  1.0  6
1  1  4.0    a  1.0  5
2  2  3.0    a  1.0  4
3  3  2.0    b  2.0  3
4  4  1.0    b  2.0  2
5  5  NaN  NaN  NaN  1
'''

join函数

join:按照索引联合


frame1=pd.DataFrame({
    'a':range(5),
    'b':range(5,0,-1),
    'c':list('aaabb'),
    'd':[1,1,1,2,2]
})
frame2=pd.DataFrame({
    'a':range(6),
    'e':range(6,0,-1),
})
frame3=pd.DataFrame({
    'f':range(6),
    'g':range(6,0,-1),
},index=[1,3,4,7,8,9])
new_frame=frame1.join(frame2,rsuffix='_r',how='outer')
print(new_frame)
'''
     a    b    c    d  a_r  e
0  0.0  5.0    a  1.0    0  6
1  1.0  4.0    a  1.0    1  5
2  2.0  3.0    a  1.0    2  4
3  3.0  2.0    b  2.0    3  3
4  4.0  1.0    b  2.0    4  2
5  NaN  NaN  NaN  NaN    5  1
'''

#如果连接的参数是列表,lsuffix与rsuffix参数失效,此时需保证列名不能重复,否则报错
new_frame2=frame1.join([frame2,frame3],how='outer')

concat函数
 

objs:需要连接的对象,可以为字典或列表
axis:轴向,默认为0
join:默认为“outer”。outer为联合,inner为交集。
ignore_index:不保留原索引,产生新索引,默认False
keys:指定分层索引
names:keys存在下,指定分层索引的层级名称
f1=pd.DataFrame(np.arange(6).reshape(3,2),index=list('abc'),columns=['one','two'])
f2=pd.DataFrame(np.arange(4).reshape(2,2),index=list('ac'),columns=['three','four'])
print(pd.concat([f1,f2],axis=1,sort=True))
'''
   one  two  three  four
a    0    1    0.0   1.0
b    2    3    NaN   NaN
c    4    5    2.0   3.0
'''
print(pd.concat([f1,f2],axis=1,sort=True,keys=['f1','f2'],names=['lever1','lever2']))
'''
lever1  f1        f2     
lever2 one two three four
a        0   1   0.0  1.0
b        2   3   NaN  NaN
c        4   5   2.0  3.0
'''

数据重叠

'''
数据重叠:空值替换,有点映射的意思,以下例子,当f1中为空值,替换为f2的值,当f1,f2都有值,则不替换
'''
f1=pd.DataFrame({
    'a':[0,np.nan,2],
    'b':[1,1,np.nan],
    'c':range(3)
})
f2=pd.DataFrame({
    'a':[1,1,2],
    'b':[2,2,4]
})
print(f1.combine_first(f2))
'''
     a    b  c
0  0.0  1.0  0
1  1.0  1.0  1
2  2.0  4.0  2
'''

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值