pandas拼接与合并


字段大部分一样用拼接,大部分不一样用合并

1. 拼接与合并定义

1.1 拼接

  • 方法
    • pd.concat
    • pd.append

pd.concat,pd.append函数类似,只是多了一些参数:
axis=0
keys
join=‘outer’/‘inner’:表示的是级联方式
outer会将所有的项进行级联(忽略匹配不匹配),inner只会将匹配的项级联,不匹配的项不级联
(忽略匹配或不匹配),而Inner只会将匹配的项级联到一起,不匹配的不级联ignore_index=False

1.2 合并

  • mergeconcat的区别在于
    • merge需要依据某一共同列来进行合并
  • 使用pd.merge()合并时,会自动根据两者相同columns名称的那一列,作为key来进行合并
  • 注意:每一列元素的顺序不要求一致

2.pd.concat方法拼接操作

2.1 匹配拼接操作

指的是级联的维度的索引一致

纵向级联时列索引一致,横向级联时行索引一致

  • 索引维度一致名字不一致

    df1=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','B','C'])
    df2=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','D','C'])
    #axis=1,横向级联,在行后面添加
    pd.concat((df1,df2),axis=1)
    
  • 索引维度和名字一致

    df1=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','B','C'])
    pd.concat((df1,df1),axis=1)  
    

2.2 不匹配拼接操作

指的是级联的维度的索引不一致

例如:纵向级联时列索引不一致,横向级联时行索引不一致

  • 如果想要保留数据的完整性必须使用outer(外连接)

2.2.1 外连接

  • 外连接[outer]:补NaN(默认模式)

    df1=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','B','C'])
    df2=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','D','C'])
    #默认外级联,不可以级联的填充为NaN
    pd.concat((df1,df2),axis=0) # aixs=0,增加行
    

在这里插入图片描述

2.2.2 内连接

  • 内连接[inner]:只连接匹配的项
    df1=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','B','C'])
    df2=pd.DataFrame(data=np.random.randint(0,100,size=(5,3)),columns=['A','D','C'])
    #inner直接把可以级联的级联,不可以级联的不处理
    pd.concat((df1,df2),axis=0,join='inner')
    

3. append函数的使用

  • 只能追加列 【列名相同,向下追加,行数会增加】

    # ignore_index=True列索引重置
    df1.append(df2,ignore_index=True)
    

4. pd.merge()合并操作

4.1 定义

4.2 一对一合并

  • 根据相同的列索引合并
df1=DataFrame({
    'employee':['lucy','mercy','tom'],
    'group':['Accounting','Engineering','Engineering']
})
df2 = DataFrame({
	'employee':['lucy','mercy','tom'],
    'hire_data':[2004,2008,2012]
})
pd.merge(df1,df2,on='employee')

在这里插入图片描述

4.3一对多合并

  • on不写,默认情况下使用两表中共有的列作为合并条件
df3=DataFrame({
    'employee':['lisa','jake'],
    'group':['Acounting','Engineering'],
    'hire_data':[2004,2016]
})
df4=DataFrame({
    'group':['Accounting','Engineering','Engineering'],
    'supervisor':['Carly','Guido','Steve']
})
pd.merge(df3,df4)

在这里插入图片描述

4.4 多对多合并

df1=DataFrame({
    'employee':['lucy','mercy','tom'],
    'group':['Accounting','Engineering','Engineering']
})
df5=DataFrame({
    'group':['Engineering','Engineering','HR'],
    'supervisor':['Carly','Guido','Steve']
})

4.4.1 左合并

  • 左表为主表
    #左表为主表df1
    pd.merge(df1,df5,how='left')
    

在这里插入图片描述

4.4.2 右合并

  • 右表为主表
    #右表为主表,df5
    pd.merge(df1,df5,how='right')
    

在这里插入图片描述

4.5 key的规范化

  • 当两张表没有可进行连接的列时,可使用left_onright_on手动指定merge中左右两边的那一列作为连接的列

    df1=DataFrame({
        'employee':['Bobs','Linda','Bill'],
        'group':['Accounting','Product','Marketing'],
        'hire_date':[1998,2017,2018]
    })
    df5=DataFrame({
        'name':['Lisa','Bobs','Bill'],
        'hire_dates':[1998,2016,2007]
    })
    #df1的employee与df5的name,对应
    pd.merge(df1,df5,left_on='employee',right_on='name')
    

在这里插入图片描述

5. pandas 数据对比

df9.compare(df10,keep_shape=True,keep_equal=True)
 #keep_equal=True:再保留原始相同的值
 #,keep_shape=True:保留原数据框
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼靡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值