Pandas 中不同类型的连接
pandas模块包含对数据帧执行各种操作的各种功能,如连接、连接、删除、添加等。在本文中,我们将讨论可以在Pandas数据帧上执行的各种类型的连接操作。 Pandas 中的 Join 主要有五种类型:
- 内部联接
- 左外连接
- 右外连接
- 完全外连接或简单外连接
- 索引连接
要了解不同类型的连接,我们将首先制作两个 DataFrame,即a和b 。
数据框a:
Python3
# 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
Python3
# 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
Python3
# 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
Python3
# 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
Python3
# 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
Python3
# 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
Python3
# 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
输出:
数据帧 b:
蟒蛇3
# 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
输出:
我们将使用这两个数据框来了解不同类型的连接。
- 内连接:内连接是您将使用的最常见的连接类型。它返回一个仅包含具有共同特征的行的数据帧。这类似于两个集合的交集。
例子:
蟒蛇3
# 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
输出:
- 左外连接:使用左外连接,将显示第一个数据框中的所有记录,而不管是否可以在第二个数据框中找到第一个数据框中的键。而对于第二个数据帧,只会显示在第二个数据帧中可以在第一个数据帧中找到的键的记录。
例子:
蟒蛇3
# 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
输出:
- 右外连接:对于右连接,将显示第二个数据框中的所有记录。但是,只会显示可以在第二个数据框中找到的第一个数据框中具有键的记录。
例子:
蟒蛇3
# 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
输出:
- 全外连接:全外连接返回左侧数据框中的所有行、右侧数据框中的所有行,并在可能的情况下匹配行,在其他地方使用 NaN。但是如果数据帧是完整的,那么我们会得到相同的输出。
例子:
蟒蛇3
# 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 传递,即两个数据帧都使用默认的内连接合并在索引上。
例子:
蟒蛇3
# 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
输出: