Pandas中的数据合并---merge与concat

数据合并操作分类

  • pd.merge()和DataFrame.join():数据库风格的连接操作

  • pd.concat()和pd.append():多个对象的堆叠

  • Series.combine_first()和DataFrame.combine_first():用参数对象中的数据为调用者对象中数据打补丁

问3个问题

  • 连接方式是什么?

  • 键是哪个?

  • 键唯一吗?

数据合并类型分类

多是指作为连接列的属性值是否唯一,不重复

只要记住多对多是相同属性值部分的笛卡尔积就行

pd.merge()

注意其默认参数

指定连接键的4种方式:

  1. 未指定连接键,以列名的交集作为连接键

  1. left和right需连接的键有相同的列名,使用on参数

  1. left和right需连接的键有不同的列名,但有相同类型的属性值,使用left_on和right_on参数

  1. 使用Index(row label)作为连接键,使用left_index和right_index参数

数据库的连接方式:

inner连接--表A与表B的交集

left 连接--表A + (表A与表B的交集)

right 连接--表B + (表A与表B的交集)

outer连接--表A和表B的并集

inner连接--表A与表B的交集:

  • 连接键都唯一,即一对一

  • 连接键一个唯一另一个不唯一,即多对一

  • 连接键都不唯一,即多对多

left 连接--表A + (表A与表B的交集)

  • 连接键都唯一,即一对一

  • 连接键一个唯一另一个不唯一,即多对一

  • 连接键都不唯一,即多对多

right 连接--表B + (表A与表B的交集)

  • 连接键都唯一,即一对一

  • 连接键一个唯一另一个不唯一,即多对一

  • 连接键都不唯一,即多对多

outer连接--表A和表B的并集

  • 连接键都唯一,即一对一

  • 连接键一个唯一另一个不唯一,即多对一

  • 连接键都不唯一,即多对多

DataFrame.join()

on:Column(s) in the caller to join on theindex in other, otherwise joins index-onindex

水平拼接

pd.append()

A useful shortcut toconcat are the append instance methods on Series andDataFrame. These methods actually predated concat. They concatenate along axis=0, namely the index

垂直拼接

pd.concat()

可以指定方向

pandas中DataFrame做差过滤

方法一:所有列名相同

df3=df1.append(df2).append(df2).drop_duplicates(subset=[“state”,”pop”],keep=False)

keep=False表示丢弃所有的重复项

方法二:某一列名相同

df3=merge(df1,df2,how=”left”,on=”column_name”)
df3=df3[df3.isnull().T.any()]
# 或者df3=df3[df3.isnull().any(axis=1)]

df3要有与df1不同的列名,同时相同的列名会自动加后缀区分

举例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wugou2014

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

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

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

打赏作者

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

抵扣说明:

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

余额充值