Pandas(杂):表格的各种连接方式join

简单记录一下数据库或表格连接的类型,建议通过行数辨别

pd.merge(); df.join(); gpd.sjoin()等函数中会用到,只有存在共同字段的列才能连接。否则拼接应该采用pd.concat()函数

  1. 内连接 (inner join),一般默认,只保留匹配到的结果

  2. 左(外)连接 (left join),以左侧表的连接键唯一值数量为准,左表行数不变

  3. 右(外)连接 (right join),右表行数不变

  4. 全连接 (full join),在pandas中没有:在数据库中指返回左右表的所有行,缺失处补空值。行数=左表的行数+右表的行数-公共连接行

举例,下面左表5行2列,右表-4行两列,公共列为fid,fid公共行数为3行,结果

  • 内连接返回三行,['a', 'b','c'],未匹配的丢弃

  • 左连接返回5行,[1,2,3,4,5],无值则补null

  • 右连接返回3行,[3,4,5,7],无值则补null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
data1 = {
'fid':[1,2,3,4,5],
'name':['a', 'b','c','d','e']
}
data2 = {
'fid':[3,4,5,7],
'name':['a', 'b','c','e']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 查看输出
pd.merge(left=df1, right=df2, on='fid', how='left')
pd.merge(left=df1, right=df2, on='fid', how='right')
pd.merge(left=df1, right=df2, on='fid', how='inner')

分别输出: