pandas内置数据集_数据规整化:pandas 求合并数据集(交集并集等)

本文介绍了如何使用Pandas的merge函数进行数据集的合并,包括内连接(默认)、外连接、左连接、右连接等操作。详细阐述了how参数的作用,展示了多对多连接及根据多个键进行合并的例子,并提到了merge函数的参数设置,如left_on和right_on的区别,以及如何处理重复索引。还提到了DataFrame.join方法在索引合并上的应用。
摘要由CSDN通过智能技术生成

数据集的合并或连接运算是通过一个或多个键将行链接起来的。这些运算是关系型数据库的核心。pandas的merge函数是对数据应用这些算法的这样切入点。

默认是交集, inner连接

列名不同可以分别指定:

bfb0d184ca670da3d69d9c3c680b0ecb.png

其他方式还要‘left’、‘right’以及“outer”。外链接求取的是键的并集, 组合了左连接和右连接的效果。

32220cbf4a7fd30e0d5f48553a36ac81.png

how 的作用是合并时候以谁为标准,是否保留NaN值

79c2fb2d9c63963d8ca96645d809e0a3.png

多对多

7b875d099ca8c4d535ff897f424ff20c.png

多对多 连接产生的行的笛卡尔积。由于左边的DataFrame有3个‘b’行, 右边的有2个,所以最终结果中

就有6个‘b’行。

03217afa79c81dc9ddf974d1a39dbfaf.png

根据多个键进行合并, 传入一个由列明组成的列表即可:

left =DataFrame(

{"key1": ['foo', 'foo', 'bar'],"key2": ['one', 'two', 'one'],"lval": [1, 2, 3]

}

)

right=DataFrame(

{"key1": ['foo', 'foo', 'bar', 'bar'],"key2": ['one', 'one', 'one', 'two'],"rval": [4, 5, 6, 7]

}

)

print(left)

print(right)

pm= pd.merge(left, right, on=["key1", "key2"], how="outer")

print(pm)

96537cf2e6ec91316e85ecb2f6071c9b.png

1d717b898bbcf6876ea3b79d78e80cd7.png

on与left_on 和right_on的区别

0363c4c45a2b9806268f204427bef518.png

这个是left_on 和right_on

e6df6452fc6519dc34505f2f94b2115b.png

去重或更改后缀

5ef4390ea1a76d25bbd4413e6d1bac23.png

merge函数的参数

9ccb35d471c0cf0d50255dabde3367b8.png

索引上的合并

fa17baeeb9fe2966241f072ea1e4d027.png

merge方法求取连接键的并集

5c58274fbd58c7bae4f12e28a958aee4.png

对于层次化索引的数据

这个时候必须以列表的形式指明用作合并键的多个列(注意对重复索引的处理)

lefth = DataFrame({'key1':[ 'Ohio', 'Ohio', 'Ohio','Nevada', 'Nevada',],"key2":[2000, 2001, 2002,2001, 2002],"data":np.arange(5.)

})

righth= DataFrame(np.arange(12).reshape((6, 2)),

index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'],

[2001, 2000, 2000, 2000, 2001, 2002]],

columns=['event1', 'event2']

)

print(lefth)

print(righth)

pm= pd.merge(lefth, righth,left_on=['key1', 'key2'], right_index=True)

print(pm)

90eee0174342da3333c2fb7e04eb7d84.png

索引并集

35d340c0e35a31c10d8bfd6169e78ad6.png

DataFrame.join实例方法

它能更为方便地实现索引合并。它还可用于和合并多个带有相同或相似索引的DataFrame对象, 而不管他们

之间有重叠的列。

1225f56b3fc319f7ba103c97729418ee.png

print(left1.join(right1, how='inner'))

left2.join([1, 2], how='outer') #多个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值