Pandas中不同类型的连接
pandas模块包含各种功能,可以对数据帧进行各种操作,如连接、串联、删除、添加等。在这篇文章中,我们将讨论可以在pandas数据框架上执行的各种类型的连接操作。Pandas中主要有五种类型的连接。
- Inner Join
- 左外联接
- 右外联接
- 全外联或简单的外联
- Index Join
为了了解不同类型的连接,我们将首先制作两个DataFrames,即a和b。
Dataframe a:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# printing the dataframe
a
输出:
DataFrame b:
# importing pandas
import pandas as pd
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# printing the dataframe
b
输出:
我们将使用这两个数据框架来理解不同类型的连接。
- 内联接。内联是你要处理的最常见的联接类型。它返回一个只有那些具有共同特征的记录的数据框架。这类似于两个集合的相交。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# inner join
df = pd.merge(a, b, on='id', how='inner')
# display dataframe
df
输出:
- 左外联接。在左外连接中,第一个数据框架中的所有记录都会被显示出来,而不考虑第一个数据框架中的键是否能在第二个数据框架中找到。而对于第二个数据框架来说,只有在第一个数据框架中可以找到的、具有第二个数据框架中的键的记录才会被显示。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# left outer join
df = pd.merge(a, b, on='id', how='left')
# display dataframe
df
输出:
- 右外联接。对于右联接,第二个数据框架的所有记录都将被显示。然而,只有第一个数据框架中的键在第二个数据框架中可以找到的记录才会被显示。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# right outer join
df = pd.merge(a, b, on='id', how='right')
# display dataframe
df
输出:
- 完全外联。一个完整的外部连接会返回左边数据框架的所有记录和右边数据框架的所有记录,并在可能的情况下匹配记录,在其他地方则是NaNs。但是如果数据框架是完整的,那么我们就会得到相同的输出。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# full outer join
df = pd.merge(a, b, on='id', how='outer')
# display dataframe
df
输出:
- 索引连接。要在索引上合并数据框架,请将left_index和right_index参数设为True,即两个数据框架都使用默认的Inner Join在一个索引上合并。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# index join
df = pd.merge(a, b, left_index=True, right_index=True)
# display dataframe
df
输出: