轴向堆叠数据
Pandas在合并数据集时,常见的操作包括轴向堆叠数据、主键合并数据、根据行索引合并数据和合并重叠数据,这些操作各有各的特点。
concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并,该函数的语法格式如下:
pandas.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,
levels=None,names=None,verify_integrity=False,sort=None, copy=True)
上述函数中常用参数表示的含义如下:
(1) axis:表示连接的轴向,可以为0或1,默认为0。
(2) join:表示连接的方式,inner表示内连接,outer表示外连接,默认使用外连接。
(3) ignore_index:接收布尔值,默认为False。如果设置为True,清除现有索引并重置索引值。
(4) keys:表示添加最外层索引,接收序列,默认为None。
(5) levels:用于构建MultiIndex的特定级别(唯一值)。
(6) names:结果分层索引中的层级的名称。
(7) verify_integerity:检查新的连接轴是否包含重复项。接收布尔值, 当 设置为True时,如果有重复的轴将会抛出错误,默认为False。
根据轴方向的不同(axis参数),可以将堆叠分成横向堆叠与纵向堆叠,默认采用的是纵向堆叠方式。在堆叠数据时,默认采用的是外连接(join参数设为outer)的方式,当然也可以通过join=inner设置为内连接的方式,图1是两种连接方式的效果图。
图1 连接方式
下面以横向堆叠与外连接、纵向堆叠与内连接的为例,介绍如何使用concat()函数合并数据,具体内容如下。
1、横向堆叠与外连接
当使用concat()函数合并时,若是将axis参数的值设为1,且join参数的值设为outer,代表着使用横向堆叠与外连接的方式进行合并。假设现在有两个表格分别为df1与df2,它们采用横向堆叠、外连接的方式合并的效果如图2所示。
图2 横向堆叠示例
接下来,通过示例代码来演示如何使用concat()函数将df1表和df2表按横轴方向采用外连接方式进行合并,得到合并后的result表,具体代码如下。
In [25]: import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A0', 'A1'],
'B': ['B0', 'B0', 'B1']})
df2 = pd.DataFrame({'C': ['C0', 'C0', 'C1', 'C3'],
'D': ['D0', 'D2', 'D2', 'D3']})
# 横向堆叠合并df1和df2,采用外连接的方式
pd.concat([df1, df2], join='outer', axis=1)
Out[25]:
A B C D
0 A0 B0 C0 D0
1 A0 B0 C0 D2
2 A1 B1 C1 D2
3 NaN NaN C3 D3
在上述示例中,创建了两个DataFrame类对象df1与df2,然后使用concat()函数合并这两个对象,由于这两个对象的列长度不相同,所以合并后会产生不存在的数据,这些数据会自动使用NaN进行填充。
2、纵向堆叠与内连接
当使用concat()函数合并时,若是将axis参数的值设为0,且join参数的值设为inner,代表着使用纵向堆叠与内连接的方式进行合并。假设现在有两个表格分别为df1与df2,它们采用纵向堆叠、内连接的方式合并的效果如图3所示。
图3 合并结果
接下来,通过示例代码来演示如何使用concat()函数将df1表和df2表按纵轴方向采用内连接方式进行合并,得到合并后的result表,具体代码如下。
In [26]: import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2']})
df2 = pd.DataFrame({'B': ['B3', 'B4', 'B5'],'C': ['C3', 'C4', 'C5'],
'D': ['D3', 'D4', 'D5']})
pd.concat([df1, df2], join='inner', axis=0)
Out[26]:
B C
0 B0 C0
1 B1 C1
2 B2 C2
0 B3 C3
1 B4 C4
2 B5 C5
在上述示例中,创建了两个DataFrame类对象df1与df2,然后使用concat()函数合并这两个对象,由于这两个对象中都有B、C列,所以只会将这两列的数据进行堆叠。