以下是在Python中的Pandas中进行合并、连接和连接的不同方式和方法:
Python Pandas 中的 DataFrame concat()
concat()
函数负责执行沿轴的连接操作的所有繁重工作,同时对其他轴上的索引(如果有)执行可选的集合逻辑(并集或交集)。在此示例中,创建了三个具有相同的列但不同索引的DataFrame(df1
、df2
和)。使用时,这些Pandas DataFrame非常重要,从而生成一个组合DataFrame,其中每个原始DataFrame中的行相互连通。df3
pd.concat()
- Python3
# Creating first dataframe
df1 = pd.DataFrame({ 'A' : [ 'A0' , 'A1' , 'A2' , 'A3' ],
'B' : [ 'B0' , 'B1' , 'B2' , 'B3' ],
'C' : [ 'C0' , 'C1' , 'C2' , 'C3' ],
'D' : [ 'D0' , 'D1' , 'D2' , 'D3' ]},
index = [ 0 , 1 , 2 , 3 ])
# Creating second dataframe
df2 = pd.DataFrame({ 'A' : [ 'A4' , 'A5' , 'A6' , 'A7' ],
'B' : [ 'B4' , 'B5' , 'B6' , 'B7' ],
'C' : [ 'C4' , 'C5' , 'C6' , 'C7' ],
'D' : [ 'D4' , 'D5' , 'D6' , 'D7' ]},
index = [ 4 , 5 , 6 , 7 ])
# Creating third dataframe
df3 = pd.DataFrame({ 'A' : [ 'A8' , 'A9' , 'A10' , 'A11' ],
'B' : [ 'B8' , 'B9' , 'B10' , 'B11' ],
'C' : [ 'C8' , 'C9' , 'C10' , 'C11' ],
'D' : [ 'D8' , 'D9' , 'D10' , 'D11' ]},
index = [ 8 , 9 , 10 , 11 ])
# Concatenating the dataframes
pd.concat([df1, df2, df3])
|
显示: ABCD
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
Python 中 Pandas 的 Python merge()
DataFrames 合并 Pandas 提供了一个单一的函数,merge(),DataFrame 对象之间所有标准数据库连接操作的入口点。这里示例中,创建了两个 DataFrames(left
和),它们有一个共同的键列“Key”该函数使用内连接根据它们的共同“Key”列合并这些DataFrame,从而生成一个组合DataFrame,其中仅包含两个DataFrame中键值匹配的行。right
pd.merge()
- Python3
# Dataframe created
left = pd.DataFrame({ 'Key' : [ 'K0' , 'K1' , 'K2' , 'K3' ],
'A' : [ 'A0' , 'A1' , 'A2' , 'A3' ],
'B' : [ 'B0' , 'B1' , 'B2' , 'B3' ]})
right = pd.DataFrame({ 'Key' : [ 'K0' , 'K1' , 'K2' , 'K3' ],
'C' : [ 'C0' , 'C1' , 'C2' , 'C3' ],
'D' : [ 'D0' , 'D1' , 'D2' , 'D3' ]})
# Merging the dataframes
pd.merge(left, right, how = 'inner' , on = 'Key' )
|
显示:
键 ABCD
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
左合并
该pd.merge()
函数how='left'
执行左连接,将left
DataFrame与right
“Key”上的DataFrame合并。DataFrame中的所有行都left
将被保留,并且right
DataFrame中的匹配行将附加其各自的值。
- Python3
left_merged = pd.merge(left, right, how = 'left' , on = 'Key' )
print (left_merged)
|
显示:
键 ABCD
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
右合并
该pd.merge()
函数how='right'
执行右连接,将left
DataFrame与right
“Key”上的DataFrame合并。DataFrame中的所有行都right
将被保留,并且left
DataFrame中的匹配行将附加其各自的值。
- Python3
right_merged = pd.merge(left, right, how = 'right' , on = 'Key' )
print (right_merged)
|
显示:
键 ABCD
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
外部合并
函数pd.merge()
执行how='outer'
外连接,将left
DataFrame与right
“Key”列上的DataFrame完全合并。这将生成一个包含left
和right
DataFrame中所有行的DataFrame,并在没有匹配项的位置用NaN填充恢复值。
- Python3
outer_merged = pd.merge(left, right, how = 'outer' , on = 'Key' )
print (outer_merged)
|
显示:
键 ABCD
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
Python Pandas 中的 DataFrames join()
在此示例中,left
和right
DataFrames均使用键“K0”、“K1”、“K2”和“K3”进行索引。该操作根据其索引合并DataFrames,根据共享索引将中的列“A”和“B”与中的列“C”和“D”left.join(right)
合并。left
right
- Python3
left = pd.DataFrame({ 'A' : [ 'A0' , 'A1' , 'A2' , 'A3' ],
'B' : [ 'B0' , 'B1' , 'B2' , 'B3' ]},
index = [ 'K0' , 'K1' , 'K2' , 'K3' ])
right = pd.DataFrame({ 'C' : [ 'C0' , 'C1' , 'C2' , 'C3' ],
'D' : [ 'D0' , 'D1' , 'D2' , 'D3' ]},
index = [ 'K0' , 'K1' , 'K2' , 'K3' ])
# Joining the dataframes
left.join(right)
|
输出
ABCD
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
K2 A2 B2 C2 D2
K3 A3 B3 C3 D3
对比总结:
从高层次来看:
.concat()
只需将多个DataFrame
垂直堆叠在一起,或者在索引对齐后水平缝合.merge()
首先对齐两个DataFrame
' 选定的公共列或索引,然后从每个对齐的行中挑选剩余的列DataFrame
。
进一步来说,.concat()
:
- 是顶级 pandas 函数
DataFrame
垂直或水平组合两个或多个熊猫- 水平组合时仅对齐索引
- 当任何一个
DataFrame
包含重复索引时就会出错。 - 默认为外连接,可选择内连接
和.merge()
:
- 既作为顶级 pandas 函数存在,又作为
DataFrame
方法存在(从 pandas 1.0 开始) DataFrame
水平方向精确合并两个- 将调用方
DataFrame
的列或索引与其他方DataFrame
的列或索引对齐 - 通过执行笛卡尔积来处理连接列或索引上的重复值
- 默认为内连接,有左、外、右选项
请注意,执行时pd.merge(left, right)
,如果left
有两行包含来自连接列或索引的相同值,则每行将与right
相应的行合并,从而产生笛卡尔积。另一方面,如果.concat()
用于合并列,我们需要确保在任一中都不存在重复的索引DataFrame
。
从实际情况来看:
.concat()
同质组合时先考虑DataFrame
,.merge()
互补组合时先考虑DataFrame
。- 如果需要垂直合并,则使用
.concat()
。如果需要通过列水平合并,则使用.merge()
,默认情况下会在共同的列上进行合并。
标签:right,Key,合并,DataFrame,merge,pd,数据处理,pandas,left From: https://www.cnblogs.com/gao1261828/p/18319126