概述:
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])
- 纵向拼接
在纵向拼接时,即将三个数据框按行方向拼接,可以用如下语句操作:
result = pd.concat([df1, df2, df3], axis=0)
其中参数axis=0
表示按行方向拼接。但是,因为三个数据框的列名相同,如果直接拼接便会错位。因此需要加上ignore_index=True
。
result = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
- 横向拼接
在横向拼接时,即将三个数据框按列方向拼接,可以用如下语句操作:
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
,因为它对行两两组合无用。
- 部分列拼接
在横向拼接时,若想方便地只拼接指定列,可以利用join='inner'
来实现。
result = pd.concat([df1, df4], axis=1, join='inner')
其中参数join='inner'
表示连接方式为内连接。
- 新添加 key
如果需要知道拼接后的数据框中的数据是哪个原始数据框来的,可以为每个原始数据框加入keys(即为数据框增加一层索引)。
result = pd.concat([df1, df2, df3], keys=['x', 'y', 'z'])
其中参数keys=['x', 'y', 'z']
表示原始数据框的分组名称为’x’, ‘y’, ‘z’。
总之,pandas.concat()函数在数据清洗、分析和整理中非常常见,是pandas常用的数据拼接函数之一。