Python中的pandas.concat()函数

  • Post category:Python

概述:

pandas.concat()函数是将多个pandas数据框纵向或横向拼接的工具函数,可以实现不同维数数据的拼接,比如行方向(纵向)、列方向(横向)。

语法:

pandas.concat(objs, axis=0, join='outer', ignore_index=False,
              keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

参数解释:

  • objs: 需要连接的对象。
  • axis:默认为0,表示连接之后数据框纵向拼接,axis=1表示横向拼接。
  • join:连接方式,默认是outer,可以选择inner、outer、left 或right。inner 表示连接的数据框要完全匹配,否则填充 Nan。outer 表示相当于求并集,不存在的值当成 Nan 填充。left和right 表示取其中的左数据框或右数据框,并且用 Nul 填充。
  • ignore_index:是否忽略掉原始数据框的索引。
  • keys:为拼接后的数据框增加外层索引(也可以理解为分组)。
  • levels:keys参数中对应层级的名称。一些同名数据框添加了外部索引,可以命名各个层。
  • names:levels参数中每个层级的名称。
  • verify_integrity:如果检查到行索引有重复的话,就会抛出一个异常。

示例:

先创建三个数据框:

import pandas as pd
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])
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])
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])
  1. 纵向拼接

在纵向拼接时,即将三个数据框按行方向拼接,可以用如下语句操作:

result = pd.concat([df1, df2, df3], axis=0)

其中参数axis=0表示按行方向拼接。但是,因为三个数据框的列名相同,如果直接拼接便会错位。因此需要加上ignore_index=True

result = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
  1. 横向拼接

在横向拼接时,即将三个数据框按列方向拼接,可以用如下语句操作:

df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
                       'D': ['D2', 'D3', 'D6', 'D7'],
                       'F': ['F2', 'F3', 'F6', 'F7']},
                      index=[2, 3, 6, 7])
result = pd.concat([df1, df4], axis=1)

其中参数axis=1表示按列方向拼接,这里需注意两个参数:拼接数据框的索引要想对应,不然会出现缺失。另外,这里并没有使用ignore_index,因为它对行两两组合无用。

  1. 部分列拼接

在横向拼接时,若想方便地只拼接指定列,可以利用join='inner'来实现。

result = pd.concat([df1, df4], axis=1, join='inner')

其中参数join='inner'表示连接方式为内连接。

  1. 新添加 key

如果需要知道拼接后的数据框中的数据是哪个原始数据框来的,可以为每个原始数据框加入keys(即为数据框增加一层索引)。

result = pd.concat([df1, df2, df3], keys=['x', 'y', 'z'])

其中参数keys=['x', 'y', 'z']表示原始数据框的分组名称为’x’, ‘y’, ‘z’。

总之,pandas.concat()函数在数据清洗、分析和整理中非常常见,是pandas常用的数据拼接函数之一。