python pandas实现数据Concat拼接的完整指南

 更新时间:2025年06月12日 09:13:22   作者:酷爱码  
Pandas是Python中用于数据分析的核心库之一,其concat()函数是数据合并操作的核心工具,本文将通过示例代码和参数解析,全面介绍concat()的用法,有需要的可以了解下

Pandas是Python中用于数据分析的核心库之一,其concat()函数是数据合并操作的核心工具。无论是纵向(行方向)还是横向(列方向)拼接,concat()都能灵活处理多个数据集的整合需求。本文将通过示例代码和参数解析,全面介绍concat()的用法,帮助开发者掌握数据拼接的核心技巧。

一、Concat函数的基本用法

1. 垂直拼接(纵向合并)

默认情况下,concat()会按行方向(axis=0)合并多个DataFrame,保留所有行索引。

示例代码

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 垂直拼接
result = pd.concat([df1, df2])
print(result)

输出结果

   A  B
0  1  3
1  2  4
0  5  7
1  6  8

关键点

  • 索引保留:默认保留原始DataFrame的索引(如上例中的0和1)。
  • 列对齐:要求所有DataFrame的列名一致,否则会用NaN填充缺失列。

2. 水平拼接(横向合并)

通过设置参数axis=1,可以按列方向合并多个DataFrame。

示例代码

# 创建两个DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}, index=[0, 1])
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]}, index=[0, 1])

# 水平拼接
result = pd.concat([df1, df2], axis=1)
print(result)

输出结果

   A  B  C  D
0  1  3  5  7
1  2  4  6  8

关键点

索引对齐:要求所有DataFrame的行索引一致,否则会用NaN填充缺失值。

列扩展:合并后的DataFrame会包含所有原始列。

二、Concat函数的核心参数

1. ignore_index=True:重置索引

默认情况下,concat()会保留原始索引。若需生成连续的新索引,可设置ignore_index=True。

示例代码

result = pd.concat([df1, df2], ignore_index=True)
print(result)

输出结果

   A  B
0  1  3
1  2  4
2  5  7
3  6  8

2. join='inner'与join='outer':控制列的合并方式

join='outer'(默认):保留所有列,缺失值用NaN填充。

join='inner':仅保留共同列,过滤掉不匹配的列。

示例代码

# df1和df2的列不完全一致
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'B': [5, 6], 'C': [7, 8]})

# 外连接(默认)
result_outer = pd.concat([df1, df2], join='outer')
print("外连接结果:")
print(result_outer)

# 内连接
result_inner = pd.concat([df1, df2], join='inner')
print("内连接结果:")
print(result_inner)

输出结果

外连接结果:
   A  B    C
0  1  3  NaN
1  2  4  NaN
0  NaN  5  7.0
1  NaN  6  8.0

内连接结果:
   B
0  3
1  4
0  5
1  6

3. keys:添加层次化索引

通过keys参数,可以为合并后的数据添加层级索引,便于后续筛选。

示例代码

result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)

输出结果

       A    B
df1 0   1  3.0
    1   2  4.0
df2 0  NaN  5.0
    1  NaN  6.0

三、实际应用案例

案例1:合并不同列的数据

当两个DataFrame的列不完全一致时,concat()仍能灵活处理。

示例代码

# df1包含'A'和'B'列,df2包含'B'和'C'列
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'B': [5, 6], 'C': [7, 8]})

# 合并后保留所有列
result = pd.concat([df1, df2], axis=0)
print(result)

输出结果

     A  B    C
0  1.0  3  NaN
1  2.0  4  NaN
0  NaN  5  7.0
1  NaN  6  8.0

案例2:合并多层索引的DataFrame

concat()支持多层索引(MultiIndex)的合并操作。

示例代码

# 创建具有多层索引的DataFrame
index = pd.MultiIndex.from_tuples([('x', 'a'), ('x', 'b'), ('y', 'a'), ('y', 'b')])
df1 = pd.DataFrame({'data': [1, 2, 3, 4]}, index=index)
df2 = pd.DataFrame({'data_2': [5, 6, 7, 8]}, index=index)

# 合并
result = pd.concat([df1, df2], axis=1)
print(result)

输出结果

           data  data_2
x a      1.0     5
  b      2.0     6
y a      3.0     7
  b      4.0     8

四、Concat与Merge的区别

特性concat()merge()
合并方式按轴拼接(行或列)按键连接(类似SQL的JOIN)
适用场景数据结构简单,直接拼接需要基于共同键关联数据
索引处理保留或重置索引忽略索引,基于列匹配
复杂度简单,适合快速拼接复杂,适合关联不同数据源

五、注意事项与性能优化

1. 索引对齐问题

外连接(join='outer')可能导致大量NaN值,需根据业务需求选择连接方式。

内连接(join='inner')会过滤掉不匹配的数据,适用于严格匹配场景。

2. 性能问题

内存消耗:concat()会在内存中创建新对象,大数据量下可能导致性能下降。

优化建议:

  • 使用ignore_index=True避免索引重复。
  • 对于频繁合并操作,优先使用DataFrame.loc或merge()。

3. 数据类型一致性

合并前需确保列的数据类型一致,否则可能引发隐式转换或错误。

六、总结

Pandas的concat()函数是数据拼接的“瑞士军刀”,通过灵活的参数组合,可以满足从简单合并到复杂数据整合的多种需求。掌握其核心参数(如axis、join、keys)和实际应用场景,是高效处理数据的关键。

下一步学习建议:

  • 学习merge()函数,掌握基于键的关联操作。
  • 结合groupby()和pivot_table(),探索更复杂的数据分析场景。

到此这篇关于python pandas实现数据Concat拼接的完整指南的文章就介绍到这了,更多相关pandas数据concat拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3.7.0 Shell添加清屏快捷键的实现示例

    Python3.7.0 Shell添加清屏快捷键的实现示例

    这篇文章主要介绍了Python3.7.0 Shell添加清屏快捷键的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 基于windows下pip安装python模块时报错总结

    基于windows下pip安装python模块时报错总结

    今天小编就为大家分享一篇基于windows下pip安装python模块时报错总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python实现简单的贪吃蛇游戏

    python实现简单的贪吃蛇游戏

    这篇文章主要为大家详细介绍了python实现简单的贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Django中如何使用Celery执行异步任务

    Django中如何使用Celery执行异步任务

    这篇文章主要介绍了Django中如何使用Celery执行异步任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Python淘宝秒杀的脚本实现

    Python淘宝秒杀的脚本实现

    这篇文章主要介绍了Python淘宝秒杀的脚本实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • CentOS6.9 Python环境配置(python2.7、pip、virtualenv)

    CentOS6.9 Python环境配置(python2.7、pip、virtualenv)

    这篇文章主要介绍了CentOS6.9 Python环境配置(python2.7、pip、virtualenv)方法,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • python 利用for循环 保存多个图像或者文件的实例

    python 利用for循环 保存多个图像或者文件的实例

    今天小编就为大家分享一篇python 利用for循环 保存多个图像或者文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python3实现计算两个数组的交集算法示例

    Python3实现计算两个数组的交集算法示例

    这篇文章主要介绍了Python3实现计算两个数组的交集算法,结合2个实例形式总结分析了Python3针对数组的遍历、位运算以及元素的添加、删除等相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • Python中防止sql注入的方法详解

    Python中防止sql注入的方法详解

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。下面这篇文章主要给大家介绍了关于Python中防止sql注入的方法,需要的朋友可以参考下。
    2017-02-02
  • python如何以表格形式打印输出的方法示例

    python如何以表格形式打印输出的方法示例

    这篇文章主要介绍了python如何以表格形式打印输出的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06

最新评论