昨天,我在python利用pandas对两张excel表合并(二)一文中对两张表按列merge时on的用法。今天分享一下,merge传参时,另一个参数how的方法。在学完how的用法之后,对两张表的合并学习基本上就结束了。
1、如下图所示:
左表中name分别是:bob, millor, jiken。右表中name有bob, millor, lucy。左表有jiken而没有lucy, 右表有lucy而没有jiken。
how参数有4个值{‘inner’, ‘outer’, ‘right’,‘left’}听起来可能会让人觉得繁琐,看完下面的例子用法很快就会明白。
2、代码:
# 当how为inner时,同时,how的默认值也是inner
>>> import pandas as pd
>>> df1 = pd.read_excel(r'D:/myExcel/1.xlsx', 'Sheet1')
>>> df2 = pd.read_excel(r'D:/myExcel/2.xlsx', 'Sheet1')
# df1就是上述左表,df2就是上图中的右表
>>> df = pd.merge(df1, df2, how='inner', on=['name'])
# 有结果可知,当how为inner时,做左右表连接实际取的是name的交集,即两表
#name中的共同部分
>>> df
name math Chinese
0 bob 23 21
1 millor 32 19
# 当how为outer时,取的是name的并集,无值的补为NAN,空值的意思
>>> df = pd.merge(df1, df2, how='outer', on=['name'])
>>> df
name math Chinese
0 bob 23.0 21.0
1 millor 32.0 19.0
2 jiken 45.0 NaN
3 lucy NaN 86.0
# 当how为left时,即以左表的name的值为标准,左表的name必须保留,右表的name中有值
# 而左表没有则删除
>>> df = pd.merge(df1, df2, how='left', on=['name'])
# 结果有jiken却没有lucy
>>> df
name math Chinese
0 bob 23 21.0
1 millor 32 19.0
2 jiken 45 NaN
# 当how为right时,保留右表而不保留左表中的不同部分
>>> df = pd.merge(df1, df2, how='right', on=['name'])
# 结果保留了lucy却删除了jiken
>>> df
name math Chinese
0 bob 23.0 21
1 millor 32.0 19
2 lucy NaN 86
通过对how的用法解释,两表之间的连接已经非常清楚了。如果想有更深入的了解,可以下载pandas的官方文档。或者在我的公众号:python小工具。回复python获取。虽然是英文的,但并不难理解,建议下载。
哈哈,以上就是对两表连接的介绍。明天我将开始介绍多表之间的cancat和merge。如果有兴趣,欢迎关注:python小工具。让我们一起努力,让办公变得更方便。