轴向堆叠数据
pandas.concat(objs, axis=0, jion='outer', jion_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)
axis:表示链接的轴向,可以为0或1,默认为0
join:表示连接的方式,inner表示内连接,outer表示外链接,默认使用外链接。
ignore_index:接受布尔值,默认为False。如果设置为True,表示清楚现有索引并重置索引值。
keys:接收序列,表示添加最外层索引。
levels:用于构建MultiIndex的特定级别(唯一值)
names:在设置了keys和level参数之后,用于创建分层级别的名称。
verify_integrity:检查新的连接轴是否包含重复项。接受布尔值,当设置为True时,如果有重复的轴会抛出错误,默认为False。
横向堆叠与外链接
下面是一段示例代码
df1 = pd.DataFrame({'A':['A0','A0','A1'],
'B':['B0','B0','B1']})
df2 = pd.DataFrame({'C':['C0','C0','C1','C3'],
'D':['D0','D2','D2','D3']})
print(pd.concat([df1,df2],join='outer',axis=1))
pd.concat([df1,df2],join='outer',axis=0)
--------------------------------------下面是输出结果------------------------------------
A B C D
0 A0 B0 C0 D0
1 A0 B0 C0 D2
2 A1 B1 C1 D2
3 NaN NaN C3 D3
--------------------------------
A B C D
0 A0 B0 NaN NaN
1 A0 B0 NaN NaN
2 A1 B1 NaN NaN
0 NaN NaN C0 D0
1 NaN NaN C0 D2
2 NaN NaN C1 D2
3 NaN NaN C3 D3
纵向堆叠与内连接
下面是代码示例
df1 = pd.DataFrame({'A':['A0','A0','A1'],
'B':['B0','B0','B1']})
df2 = pd.DataFrame({'C':['C0','C0','C1','C3'],
'D':['D0','D2','D2','D3']})
print(pd.concat([df1,df2],join='inner',axis=1))
pd.concat([df1,df2],join='inner',axis=0)
------------------------------------下面是输出结果---------------------------------------
A B C D
0 A0 B0 C0 D0
1 A0 B0 C0 D2
2 A1 B1 C1 D2
-------------------------------
0
1
2
0
1
2
3
主键合并数据
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(' _x',' _y'));
left:参与合并的左侧DataFrame对象。
right:参与合并的右侧DataFrame对象。
how:表示连接方式,默认为inner该参数支持以下取值:
-
left:使用左侧的DataFrame键,类似SQL的左外连接
-
right:使用右侧的DataFrame键,类似SQL的右外连接。
-
outer:使用两个DataFrame的所有键,类似SQL的全连接
-
inner:使用两个DataFrame键的交集,类似SQL的内连接
on:用于连接的列名,必须存在于左右两个DataFrame对象之中。
left_on:以左侧DataFrame作为链接键
right_on:以右侧DataFrame作为链接键
left_index:以左侧的行索引用为链接键
right_index:以右侧的行索引用为链接键
sort:是否排序,接收布尔值,默认为Fasle
suffixes:用于追加到重叠列名的末尾,默认为( _x, _y)
在使用pd.merge()函数进行合并的时候,默认会使用重叠的列索引作为合并键,并采用内连接方式合并数据,即取行索引重叠的部分。
pd.merge()函数典型的应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。
主键合并
# 主键合并
left = pd.DataFrame({'key':['K0','K1','K2'],
'A':['A0','A1','A2'],
'B':['B0','B1','B2']})
right = pd.DataFrame({'key':['K0','K1','K2','K3'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
print(left)
print(right)
# 默认为内连接
pd.merge(left ,right ,on='key')
--------------------------------------下面是输出结果---------------------------------------
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
---------------------------
key C D
0 K0 C0 D0
1 K1 C1 D1
2 K2 C2 D2
3 K3 C3 D3
---------------------------
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
左连接
# 左连接
pd.merge(left ,right ,how='left',on='key')
------------------------下面是输出结果-------------------------
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
右连接
# 右连接
pd.merge(left ,right ,how='right',on='key')
-----------------------------下面为输出结果-------------------------------
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 NaN NaN C3 D3
全连接
# 全链接
pd.merge(left ,right ,how='outer',on='key')
------------------------------下面是输出结果------------------------------
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 NaN NaN C3 D3
合并
pd.merge(left ,right ,how='outer',right_index=True,left_index=True)
--------------------------------下面是输出结果-----------------------------------
key_x A B key_y C D
0 K0 A0 B0 K0 C0 D0
1 K1 A1 B1 K1 C1 D1
2 K2 A2 B2 K2 C2 D2
3 NaN NaN NaN K3 C3 D3
两个主键合并
`
left = pd.DataFrame({'key':['K0','K1','K2'],
'A':['A0','A1','A2'],
'B':['B0','B1','B2']})
right = pd.DataFrame({'key':['K0','K5','K2','K4'],
'B':['B0','B1','B2','B5'],
'C':['C0','C1','C2','C3'],
'D':['D0','D1','D2','D3']})
print(left)
print(right)
# 多个键进行合并(默认为内连接)
pd.merge(left,right,on=['key','B'])
# 外链接
pd.merge(left,right,how='outer',on=['key','B'])
--------------------------------下面是输出结果---------------------------------
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
-------------------------------
key B C D
0 K0 B0 C0 D0
1 K5 B1 C1 D1
2 K2 B2 C2 D2
3 K4 B5 C3 D3
-------------------------------
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 NaN NaN
2 K2 A2 B2 C2 D2
3 K5 NaN B1 C1 D1
4 K4 NaN B5 C3 D3