python中用merge方法对两个DataFrame进行合并

类似于数据库,merge操作就是将两张表合并成一张表。这里需要一些数据库的知识,知道什么叫做主键、什么叫外键、什么叫一对一、一对多、多对一、多对多的数据库关系,以及合并之后的取值方式:inner/outer/left/right。
简单的说,主键就是可以用来唯一区分记录的id值,一般用一个与业务无关的序列来表示。比如电脑的mac地址。
外键则是这个数据表和其他数据表用来做关联的字段名。我们可以用on来指定,如果在不同的表中名字不一样但是表达的内容是一样的,我们可以通过left_on和right_on参数来指定两张表中的外键。
如果我们通过外键关联后,出现了一张表中的某些字段为Na,那默认情况下,会使用inner的方式,也就是取交集的方式,把包含Na的记录删除掉,只保留那些没有Na的有效数据条目。而如果使用outer的方式的话,则是采用并集,把左右两个数据库中所有条目都合并进来,现实所有的条目,而left和right则分别代表以左边或者右边的数据库中的条目为准,也就是left的话只显示合并后左边表格原有的条目,right只显示右边条目。
我们可以用以下代码来演示:

import pandas as pd
bookid_table = pd.DataFrame({
		'book_name' : ['a','b','c','d','e','f'],
		'book_id'	: [11,22,33,44,55,66]
	}
)

rating_table = pd.DataFrame({
		'book_rating' : [1,3,2,5,6,5,7,8,9],
		'book_id'	  : [11,33,44,22,55,22,33,33,11]
	}
)

print(bookid_table)
print(rating_table)
print(pd.merge(bookid_table,rating_table))
print(pd.merge(bookid_table,rating_table,how='outer'))
print(pd.merge(bookid_table,rating_table,how='left'))
print(pd.merge(bookid_table,rating_table,how='right'))
print(pd.merge(bookid_table,rating_table,on='book_id'))

运行之后的结果如下:

  book_name  book_id
0         a       11
1         b       22
2         c       33
3         d       44
4         e       55
5         f       66
   book_rating  book_id
0            1       11
1            3       33
2            2       44
3            5       22
4            6       55
5            5       22
6            7       33
7            8       33
8            9       11
  book_name  book_id  book_rating
0         a       11            1
1         a       11            9
2         b       22            5
3         b       22            5
4         c       33            3
5         c       33            7
6         c       33            8
7         d       44            2
8         e       55            6
  book_name  book_id  book_rating
0         a       11          1.0
1         a       11          9.0
2         b       22          5.0
3         b       22          5.0
4         c       33          3.0
5         c       33          7.0
6         c       33          8.0
7         d       44          2.0
8         e       55          6.0
9         f       66          NaN
  book_name  book_id  book_rating
0         a       11          1.0
1         a       11          9.0
2         b       22          5.0
3         b       22          5.0
4         c       33          3.0
5         c       33          7.0
6         c       33          8.0
7         d       44          2.0
8         e       55          6.0
9         f       66          NaN
  book_name  book_id  book_rating
0         a       11            1
1         a       11            9
2         b       22            5
3         b       22            5
4         c       33            3
5         c       33            7
6         c       33            8
7         d       44            2
8         e       55            6
  book_name  book_id  book_rating
0         a       11            1
1         a       11            9
2         b       22            5
3         b       22            5
4         c       33            3
5         c       33            7
6         c       33            8
7         d       44            2
8         e       55            6
[Finished in 5.2s]

如果两个数据库中的外键值不一样,可以使用left_on和right_on进行指定:

bookid_table = pd.DataFrame({
		'book_name' : ['a','b','c','d','e','f'],
		'id'	: [11,22,33,44,55,66]
	}
)

rating_table = pd.DataFrame({
		'book_rating' : [1,3,2,5,6,5,7,8,9],
		'book_id'	  : [11,33,44,22,55,22,33,33,11]
	}
)
print(pd.merge(bookid_table,rating_table,left_on='id',right_on='book_id'))

结果如下:

  book_name  id  book_rating  book_id
0         a  11            1       11
1         a  11            9       11
2         b  22            5       22
3         b  22            5       22
4         c  33            3       33
5         c  33            7       33
6         c  33            8       33
7         d  44            2       44
8         e  55            6       55
[Finished in 4.7s]

关于对key的理解

我们可以认为:merge方法,通过key来决定合并之后的是否为一条记录,然后进行链接,同一个记录只占用一行,当然key也可以通过组合的方式生成组合键,只有组合键中的所有元素都相同,我们才认为是同一条记录。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值