Pandas concat()用法详解(附带实例)
Pandas 模块的 concat() 方法可以通过不同的方式将数据合并,语法格式如下:
下面介绍 concat() 方法支持的不同合并方式,其中 dfs 代表合并后的 DataFrame 对象,df1、df2 等代表单个 DataFrame 对象,result 代表合并后的结果(DataFrame 对象)。

图 1 3个结构相同的表
合并后的效果如下图所示:

图 2 合并后的效果
如果想要在合并数据时标记源数据来自哪张表,则需要在代码中加入参数 keys,例如表名分别为“1月”、“2月”、“3月”,效果如下图所示:

图 3 合并后带标记的效果
主要代码如下:
df1 和 df4 合并前后的效果如图 4 和图 5 所示:

图 4 横向表合并前

图 5 横向表合并后
主要代码如下:
例如取两表交集,表 df1 和 df4 合并前后的效果如图 6 和图 7 所示:

图 6 交叉合并前

图 7 交叉合并后
主要代码如下:
例如,根据 df4 对齐数据就会保留表 df4 的数据,然后将表 df1 的数据与之合并,行数不变,合并前后的效果如图 8 和图 9 所示。

图 8 指定表对齐数据合并前

图 9 指定表对齐数据合并后
主要代码如下:
pandas.concat(objs, axis=0, join='outer', ignore_index: bool = False, keys=None, levels=None, names=None, verify_integrity: bool = False, sort: bool = False, copy: bool = True)各个参数的含义如下表所示:
参数 | 说明 |
---|---|
objs | Series、DataFrame 或 Panel 对象的序列或映射。如果传递一个字典,则排序的键将用作键参数。 |
axis | axis=1 表示行,axis=0 表示列,默认值为 0。 |
join | 值为 inner(交集)或 outer(联合),处理其他轴上索引的方式,默认值为 outer。 |
ignore_index | 布尔值,默认值为 False。如果为 True,请不要使用并置轴上的索引值。 |
join_axes | Index 对象列表。用于处理其他 n-1 轴的特定索引,而不是执行内部/外部设置逻辑。 |
keys | 序列,默认值无。使用传递的键作为层次索引的最外层。如果为多索引,应该使用元组。 |
levels | 序列列表,默认值无。用于构建 MultiIndex 的特定级别(唯一值)。 |
names | list列表,默认值为 None。表示结果层次索引中的级别名称。 |
verify_integrity | 布尔值,默认值为 False。检查新合并的轴是否包含重复项。 |
sort | 布尔值,默认值为 True(1.0.0 以后版本默认值为 False,即不排序)。如果合并方式为外连接(join=outer),则对未对齐的非合并轴进行排序;如果合并方式为内连接(join=inner),则该参数不起作用。 |
copy | 是否复制数据,默认值为 True,如果为 False,则不复制数据。 |
下面介绍 concat() 方法支持的不同合并方式,其中 dfs 代表合并后的 DataFrame 对象,df1、df2 等代表单个 DataFrame 对象,result 代表合并后的结果(DataFrame 对象)。
Pandas concat()相同字段的表首尾相接
结构相同的表可以直接合并,表首尾相接,主要代码如下:dfs = [df1, df2, df3] result = pd.concat(dfs)例如,表 df1、df2 和 df3 结构相同,见图 1:

图 1 3个结构相同的表
合并后的效果如下图所示:

图 2 合并后的效果
如果想要在合并数据时标记源数据来自哪张表,则需要在代码中加入参数 keys,例如表名分别为“1月”、“2月”、“3月”,效果如下图所示:

图 3 合并后带标记的效果
主要代码如下:
result = pd.concat(dfs, keys=['1月', '2月', '3月'])
Pandas concat()横向表合并(行对齐)
当合并的数据列名称不一致时,可以设置参数 axis=1,concat() 方法将按行对齐,然后将不同列名的两组数据合并,缺失的数据用“NaN”填充。df1 和 df4 合并前后的效果如图 4 和图 5 所示:

图 4 横向表合并前

图 5 横向表合并后
主要代码如下:
result = pd.concat([df1, df4], axis=1)
Pandas concat()交叉合并
交叉合并需要在代码中加上 join 参数,如果值为 inner,结果将是两表的交集;如果值为 outer,结果将是两表的并集。例如取两表交集,表 df1 和 df4 合并前后的效果如图 6 和图 7 所示:

图 6 交叉合并前

图 7 交叉合并后
主要代码如下:
result = pd.concat([df1, df4], axis=1, join='inner')
Pandas concat()指定表对齐数据(行对齐)
如果指定参数 join_axes,就可以指定根据哪个表来对齐数据。例如,根据 df4 对齐数据就会保留表 df4 的数据,然后将表 df1 的数据与之合并,行数不变,合并前后的效果如图 8 和图 9 所示。

图 8 指定表对齐数据合并前

图 9 指定表对齐数据合并后
主要代码如下:
result = pd.concat([df1, df4], axis=1, join_axes=[df4.index])