Pandas 数据合并与拼接详解
Pandas 提供了 merge、join 和 concat 三种核心方法用于数据的合并与拼接。 方法主要基于两个 DataFrame 的共同列进行合并; 方法主要基于两个 DataFrame 的索引进行合并; 方法是对 Series 或 DataFrame 进行行拼接或列拼接。
Pandas 提供了 merge、join 和 concat 三种核心方法用于数据合并。merge 基于列进行连接,支持内、外、左、右连接;join 基于索引连接;concat 用于行或列的直接堆叠。本文详细解析了各方法的参数、使用场景及代码示例,帮助开发者高效处理 DataFrame 数据整合任务。

Pandas 提供了 merge、join 和 concat 三种核心方法用于数据的合并与拼接。 方法主要基于两个 DataFrame 的共同列进行合并; 方法主要基于两个 DataFrame 的索引进行合并; 方法是对 Series 或 DataFrame 进行行拼接或列拼接。
mergejoinconcatPandas 的 merge 方法是基于共同列,将两个 DataFrame 连接起来。merge 方法的主要参数如下:
left:基于左 DataFrame 列的数据合并。right:基于右 DataFrame 列的数据合并。outer:基于列的数据外合并(取并集)。inner:基于列的数据内合并(取交集),默认为 'inner'。how='inner',DataFrame 的链接方式为内连接,我们可以理解基于共同列的交集进行连接,参数 on 设置连接的共有列名。
import pandas as pd
import numpy as np
# 定义 df1
df1 = pd.DataFrame({
'alpha':['A','B','B','C','D','E'],
'feature1':[1,1,2,3,3,1],
'feature2':['low','medium','medium','high','low','high']})
# 定义 df2
df2 = pd.DataFrame({
'alpha':['A','A','B','F'],
'pazham':['apple','orange','pine','pear'],
'kilo':['high','low','high','medium'],
'price':np.array([5,6,5,7])})
# 基于共同列 alpha 的内连接
df3 = pd.merge(df1, df2, how='inner', on='alpha')
print(df3)
执行结果仅保留 alpha 列在两个表中都存在的行(即 A 和 B)。
how='outer',DataFrame 的链接方式为外连接,我们可以理解基于共同列的并集进行连接,参数 on 设置连接的共有列名。
# 基于共同列 alpha 的外连接
df4 = pd.merge(df1, df2, how='outer', on='alpha')
print(df4)
若两个 DataFrame 间除了 on 设置的连接列外并无相同列,则该列的值置为 NaN。此操作会保留所有行,缺失值填充为 NaN。
how='left'):返回左表的所有记录,如果右表中没有匹配的记录,则结果为 NaN。how='right'):返回右表的所有记录,如果左表中没有匹配的记录,则结果为 NaN。# 左连接
df_left = pd.merge(df1, df2, how='left', on='alpha')
# 右连接
df_right = pd.merge(df1, df2, how='right', on='alpha')
join 方法主要基于两个 DataFrame 的索引进行合并。它通常用于将具有不同列但共享索引的表连接在一起。
# 创建带有不同索引的 DataFrame
df_a = pd.DataFrame({'A': [1, 2]}, index=['x', 'y'])
df_b = pd.DataFrame({'B': [3, 4]}, index=['y', 'z'])
# 基于索引的 join (默认 left join)
df_join = df_a.join(df_b, how='outer')
print(df_join)
join 的参数与 merge 类似,支持 how 参数指定连接方式(inner, outer, left, right),默认使用左连接。
concat 方法是对 Series 或 DataFrame 进行行拼接或列拼接。它主要用于将多个对象沿某个轴堆叠在一起。
# 行拼接 (axis=0 默认)
df_concat_row = pd.concat([df1, df2], axis=0)
这会简单地将两个 DataFrame 的行上下堆叠。如果列名不一致,缺失部分会填充 NaN。
# 列拼接 (axis=1)
df_concat_col = pd.concat([df1, df2], axis=1)
这会将 DataFrame 左右并排。适用于增加新特征列的场景。
在实际数据处理中,应根据数据结构和分析需求选择合适的方法。注意处理重复索引、列名冲突以及内存优化问题。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online