学科分类
目录
数据分析

轴向堆叠数据

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是两种连接方式的效果图。

img

图1 连接方式

下面以横向堆叠与外连接、纵向堆叠与内连接的为例,介绍如何使用concat()函数合并数据,具体内容如下。

1、横向堆叠与外连接

当使用concat()函数合并时,若是将axis参数的值设为1,且join参数的值设为outer,代表着使用横向堆叠与外连接的方式进行合并。假设现在有两个表格分别为df1与df2,它们采用横向堆叠、外连接的方式合并的效果如图2所示。

img

图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所示。

img

图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列,所以只会将这两列的数据进行堆叠。

点击此处
隐藏目录