数据合并(前半部分)

本文详细介绍了Pandas库中DataFrame的轴向堆叠(concat)与主键合并(merge)功能,包括参数解释、示例代码和输出结果,重点展示了如何使用`join`、`axis`和`how`等参数进行数据的内外连接以及多键合并。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

轴向堆叠数据

pandas.concat(objs, axis=0, jion='outer', jion_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)

axis:表示链接的轴向,可以为0或1,默认为0

join:表示连接的方式,inner表示内连接,outer表示外链接,默认使用外链接。

ignore_index:接受布尔值,默认为False。如果设置为True,表示清楚现有索引并重置索引值。

keys:接收序列,表示添加最外层索引。

levels:用于构建MultiIndex的特定级别(唯一值)

names:在设置了keys和level参数之后,用于创建分层级别的名称。

verify_integrity:检查新的连接轴是否包含重复项。接受布尔值,当设置为True时,如果有重复的轴会抛出错误,默认为False。

横向堆叠与外链接

下面是一段示例代码

df1 = pd.DataFrame({'A':['A0','A0','A1'],
                   'B':['B0','B0','B1']})
df2 = pd.DataFrame({'C':['C0','C0','C1','C3'],
                   'D':['D0','D2','D2','D3']})
                   
print(pd.concat([df1,df2],join='outer',axis=1))
pd.concat([df1,df2],join='outer',axis=0)
​
​
--------------------------------------下面是输出结果------------------------------------
     A    B   C   D
0   A0   B0  C0  D0
1   A0   B0  C0  D2
2   A1   B1  C1  D2
3  NaN  NaN  C3  D3
​
--------------------------------
    A    B   C    D
0   A0   B0  NaN  NaN
1   A0   B0  NaN  NaN
2   A1   B1  NaN  NaN
0   NaN  NaN  C0  D0
1   NaN  NaN  C0  D2
2   NaN  NaN  C1  D2
3   NaN  NaN  C3  D3

纵向堆叠与内连接

下面是代码示例

df1 = pd.DataFrame({'A':['A0','A0','A1'],
                   'B':['B0','B0','B1']})
df2 = pd.DataFrame({'C':['C0','C0','C1','C3'],
                   'D':['D0','D2','D2','D3']})
                   
print(pd.concat([df1,df2],join='inner',axis=1))
pd.concat([df1,df2],join='inner',axis=0)
​
​
------------------------------------下面是输出结果---------------------------------------
    A   B   C   D
0  A0  B0  C0  D0
1  A0  B0  C0  D2
2  A1  B1  C1  D2
​
-------------------------------
0
1
2
0
1
2
3

主键合并数据

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(' _x',' _y'));

left:参与合并的左侧DataFrame对象。

right:参与合并的右侧DataFrame对象。

how:表示连接方式,默认为inner该参数支持以下取值:

  1. left:使用左侧的DataFrame键,类似SQL的左外连接

  2. right:使用右侧的DataFrame键,类似SQL的右外连接。

  3. outer:使用两个DataFrame的所有键,类似SQL的全连接

  4. inner:使用两个DataFrame键的交集,类似SQL的内连接

on:用于连接的列名,必须存在于左右两个DataFrame对象之中。

left_on:以左侧DataFrame作为链接键

right_on:以右侧DataFrame作为链接键

left_index:以左侧的行索引用为链接键

right_index:以右侧的行索引用为链接键

sort:是否排序,接收布尔值,默认为Fasle

suffixes:用于追加到重叠列名的末尾,默认为( _x, _y)

在使用pd.merge()函数进行合并的时候,默认会使用重叠的列索引作为合并键,并采用内连接方式合并数据,即取行索引重叠的部分。

pd.merge()函数典型的应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

主键合并

# 主键合并
left = pd.DataFrame({'key':['K0','K1','K2'],
                    'A':['A0','A1','A2'],
                    'B':['B0','B1','B2']})
right = pd.DataFrame({'key':['K0','K1','K2','K3'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
print(left)
print(right)
# 默认为内连接
pd.merge(left ,right ,on='key')
​
--------------------------------------下面是输出结果---------------------------------------
  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
---------------------------
  key   C   D
0  K0  C0  D0
1  K1  C1  D1
2  K2  C2  D2
3  K3  C3  D3
---------------------------
       key  A   B   C   D
0      K0   A0  B0  C0  D0
1      K1   A1  B1  C1  D1
2      K2   A2  B2  C2  D2

 左连接

 
# 左连接
pd.merge(left ,right ,how='left',on='key')
​
------------------------下面是输出结果-------------------------
​
    key A   B   C   D
0   K0  A0  B0  C0  D0
1   K1  A1  B1  C1  D1
2   K2  A2  B2  C2  D2

右连接 

# 右连接
pd.merge(left ,right ,how='right',on='key')
​
-----------------------------下面为输出结果-------------------------------
​
    key A   B   C   D
0   K0  A0  B0  C0  D0
1   K1  A1  B1  C1  D1
2   K2  A2  B2  C2  D2
3   K3  NaN NaN C3  D3

全连接

# 全链接
pd.merge(left ,right ,how='outer',on='key')
​
------------------------------下面是输出结果------------------------------
​
    key A   B   C   D
0   K0  A0  B0  C0  D0
1   K1  A1  B1  C1  D1
2   K2  A2  B2  C2  D2
3   K3  NaN NaN C3  D3

合并 

pd.merge(left ,right ,how='outer',right_index=True,left_index=True)
​
--------------------------------下面是输出结果-----------------------------------
​
   key_x    A   B   key_y   C   D
0   K0      A0  B0    K0    C0  D0
1   K1      A1  B1    K1    C1  D1
2   K2      A2  B2    K2    C2  D2
3   NaN     NaN NaN   K3    C3  D3

两个主键合并

`

left = pd.DataFrame({'key':['K0','K1','K2'],
                    'A':['A0','A1','A2'],
                    'B':['B0','B1','B2']})
right = pd.DataFrame({'key':['K0','K5','K2','K4'],
                     'B':['B0','B1','B2','B5'],
                     'C':['C0','C1','C2','C3'],
                     'D':['D0','D1','D2','D3']})
print(left)
print(right)
# 多个键进行合并(默认为内连接)
pd.merge(left,right,on=['key','B'])
# 外链接
pd.merge(left,right,how='outer',on=['key','B'])
​
--------------------------------下面是输出结果---------------------------------
  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
-------------------------------
  key   B   C   D
0  K0  B0  C0  D0
1  K5  B1  C1  D1
2  K2  B2  C2  D2
3  K4  B5  C3  D3
-------------------------------
    key  A  B   C   D
0   K0  A0  B0  C0  D0
1   K1  A1  B1  NaN NaN
2   K2  A2  B2  C2  D2
3   K5  NaN B1  C1  D1
4   K4  NaN B5  C3  D3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值