科学数据库(Pandas)——第四节 数据合并之join和merge

目录

数据合并之join

数据合并之merge

语法:

参数详解:

练习:


数据合并之join

join:默认情况下他是把行索引相同的数据合并到一起(合并后的数据的行根据join前面的数组行索引)

In [16]: t1
Out[16]:
     x    y    z
A  0.0  0.0  0.0
B  0.0  0.0  0.0
C  0.0  0.0  0.0

In [19]: t3
Out[19]:
     w    e    r
A  1.0  1.0  1.0
B  1.0  1.0  1.0

In [20]: t1.join(t3)
Out[20]:
     x    y    z    w    e    r
A  0.0  0.0  0.0  1.0  1.0  1.0
B  0.0  0.0  0.0  1.0  1.0  1.0
C  0.0  0.0  0.0  NaN  NaN  NaN

In [21]: t3.join(t1)
Out[21]:
     w    e    r    x    y    z
A  1.0  1.0  1.0  0.0  0.0  0.0
B  1.0  1.0  1.0  0.0  0.0  0.0

数据合并之merge

merge:按照指定的列索引把数据按照一定的方式合并到一起

语法

pd.merge(df1, df2, how= 'inner',  on=None, left_on=None,   right_on=None, left_index = False, right_index = False,   sort = False, suffixes=('_x', '_y'), copy = True,   indicator = False, validate=None)

参数详解:

  • df1:待拼接的左侧数据
  • df2:待拼接的右侧数据
  • how:左右两个数据框的连接方式。可选‘left’、‘right’、‘outer’、‘inner’默认为inner
  • on:左右两个待拼接数据框有共同列名,且按该列拼接两个数据框时使用该参数。
  • left_on:拼接两个数据框时,左数据框对应连接关键字(可为列表)。
  • right_on:拼接两个数据框时,右数据框对应连接关键字(可为列表)。
  • left_index:若为True,则按左数据框的索引连接两个数据框。
  • right_index:若为True,则按右数据框的索引连接两个数据框。
  • sort:按字典顺序通过连接键对结果数据框进行排序。
  • suffixes:为左右数据框中重复列名定义后缀。默认加('x','y')。

练习:

1.以默认的方式连接两个数据框(在没有指定连接键的时候,会按照相同的列索引name作为连接键,,即等价于on=‘name’;默认参数how是inner内连接,取两侧数据的交集)

In [34]: pd.merge(df1,df2)
Out[34]:
    name    tel  age
0  zhang  10000   30

2.左连接  how=left   (左侧df1取全部数据,右侧df2匹配左侧数据,没有的用NaN填充。默认情况下还是on=‘name’)

In [35]: pd.merge(df1,df2,how="left")
Out[35]:
    name    tel   age
0   zhao  10086   NaN
1   qian  10010   NaN
2  zhang  10000  30.0

3.右连接  how=right    (右侧df2取全部数据,左侧df1匹配右侧数据,没有的用NaN填充。默认情况下还是on=‘name’)

In [36]: pd.merge(df1,df2,how="right")
Out[36]:
    name      tel  age
0  zhang  10000.0   30
1     li      NaN   20

以上3种情况都是属于内连接

4.外连接  how=outer  (取左右连接的并集,保留所有信息)

In [37]: pd.merge(df1,df2,how="outer")
Out[37]:
    name      tel   age
0   zhao  10086.0   NaN
1   qian  10010.0   NaN
2  zhang  10000.0  30.0
3     li      NaN  20.0

 5. 以index做为连接键  (若两个数据框除连接键外,还有相同列名,默认左侧数据框中的相同列名后加_x,右侧数据框中相同列名后加_y,见上图中的name_x和name_y。)

In [38]: pd.merge(df1, df2, how= 'inner',left_index=True,right_index=True)
Out[38]:
  name_x    tel name_y  age
0   zhao  10086     li   20
1   qian  10010  zhang   30

从上面可以发现两个DataFrame中都有name列,merge合并之后,pandas会自动在后面加上(_x,_y)来区分,我们也可以通过设置suffixes来设置名字。

In [47]: pd.merge(df1, df2, how= 'inner',left_index=True,right_index=True,suffixes=("_df1","_df2"))
Out[47]:
  name_df1    tel name_df2  age
0     zhao  10086       li   20
1     qian  10010    zhang   30

6.用sort对连接键值进行排序

In [49]: pd.merge(df1,df2,how= 'outer',sort="True")
Out[49]:
    name      tel   age
0     li      NaN  20.0
1   qian  10010.0   NaN
2  zhang  10000.0  30.0
3   zhao  10086.0   NaN

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值