深入解析 Pandas Merge() 函数:像专业人士一样合并 DataFrame

在数据分析的征途中,我们经常面临这样一个挑战:数据分散在不同的表格或文件中。为了获得全面的洞察,我们需要将这些分散的信息“粘”在一起。这就是 Pandas 中 merge() 函数大显身手的地方。它类似于 SQL 中的 JOIN 语句,允许我们基于共同的键将两个 DataFrame 连接起来。

在这篇文章中,我们将深入探讨如何使用 merge() 函数来连接两个 Pandas DataFrame。我们将通过解释关键概念、参数细节和丰富的实际示例,带你从基础用法走向高级应用,确保你能够自信地处理任何数据合并的场景。

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20241112150305125231/joiningtwopandasdataframesusingmerge.webp">joiningtwopandasdataframesusingmerge

图示:使用 merge() 连接两个 Pandas DataFrame 的概念演示

为什么数据合并如此重要?

想象一下,你手头有两张表:一张包含用户的基本信息(如 ID、姓名),另一张包含用户的交易详情(如 ID、购买金额、日期)。在实际分析中,我们往往需要知道“Emily 购买了多少钱”,而不是只知道 ID 为 1 的用户购买了多少钱。这就要求我们将这两张表根据 ID 这一“公共列”无缝地拼接在一起。

merge() 的核心思想就是利用这些重叠的列(或者索引)来对齐数据。让我们首先通过一个简单的例子来感受一下它的魔力。

基础示例:连接两个 DataFrame

如果两个表中有列名相同的列(我们称之为“键”),合并过程将非常直观。我们只需要使用 on 参数来指定这个列名即可。

例如:

import pandas as pd

# 定义第一个 DataFrame:包含 ID 和 Name
df1 = pd.DataFrame({
    ‘ID‘: [1, 2, 3], 
    ‘Name‘: [‘Emily‘, ‘Jack‘, ‘Jennifer‘]
})

# 定义第二个 DataFrame:包含 ID 和 Age
df2 = pd.DataFrame({
    ‘ID‘: [1, 2, 4], 
    ‘Age‘: [24, 27, 22]
})

# 使用 ‘ID‘ 列进行内连接
# how=‘inner‘ 表示只保留两个表中都存在的 ID
res = pd.merge(df1, df2, on=‘ID‘, how=‘inner‘)

print("合并后的结果:")
print(res)

输出:

   ID     Name  Age
0   1    Emily   24
1   2     Jack   27

发生了什么?

你可能注意到了,原始数据中有 ID 为 3(Jennifer)和 ID 为 4(Age 22)的数据,但结果中并没有出现。这是因为我们使用了内连接(Inner Join,这也是默认设置)。Pandas 寻找两个表中 ID 列的交集,只保留了在两个表中同时存在的行(ID 1 和 2)。

Pandas 中的 merge() 函数详解

在深入复杂的连接类型之前,让我们先拆解一下 merge() 函数的语法和参数,理解它们是如何工作的。

#### 语法结构

pd.merge() 的基本调用方式如下:

pd.merge(left, right, how=‘inner‘, on=None, left_on=None, right_on=None, ...)

#### 核心参数解析

为了让你能够精确控制合并行为,以下是几个最关键的参数:

  • left: 参与合并的第一个 DataFrame(左侧表)。
  • right: 参与合并的第二个 DataFrame(右侧表)。
  • INLINECODEf5ca63fe: 决定连接类型的字符串。这是最重要的参数之一,决定了保留哪些行。可选值有 INLINECODE209655e1, INLINECODEa6f491f0, INLINECODE1db8691e, INLINECODEb87c439a。默认是 INLINECODE5f230d58。
  • on: 用于连接的列名(即“键”)。如果两个表中该列名完全相同,使用这个参数最方便。
  • INLINECODE7de1ffeb 和 INLINECODE4dfb702e: 当两个表中的键列名不一样时使用。例如,左表叫 INLINECODEf191dd92,右表叫 INLINECODE1ec07c51。

深入探讨连接的类型

理解不同的连接方式是掌握 merge 的关键。我们将通过一个关于水果市场的实际案例来演示每一种连接方式。

首先,让我们创建两个示例 DataFrame:

import pandas as pd

# 市场 1 的数据:水果和市场价格
df1 = pd.DataFrame({
    "fruit": ["apple", "banana", "avocado", "cherry"],
    "market_price": [21, 14, 35, 18]
})
print("=== 左侧表

# 市场 2 的数据:水果和批发价格
df2 = pd.DataFrame({
    "fruit": ["banana", "apple", "avocado", "date"],
    "wholesaler_price": [65, 68, 75, 50]
})
print("
=== 右侧表

#### 1. 内连接 – 交集

定义: 仅保留两个 DataFrame 中在指定列上有匹配值的行。如果没有匹配,该行会被丢弃。这是最严格的连接方式。

# 执行内连接
inner_merge = pd.merge(df1, df2, on="fruit", how="inner")
print("
=== 内连接结果 ===")
print(inner_merge)

结果分析:

你可以看到,只有 "apple", "banana" 和 "avocado" 出现在结果中。因为 "cherry" 只在 df1 存在,"date" 只在 df2 存在,它们都被过滤掉了。

`INLINECODE973d26c4`INLINECODEd062cd46intINLINECODEb43e0e11strINLINECODE8651b7cbdf.dtypesINLINECODEba094be7df.query()INLINECODEcb61ddaeshapeINLINECODE325f9998merge()INLINECODE73f70ed4leftonINLINECODEe774c796rightonINLINECODE6b3e1f3ehowINLINECODEd30b8185NaNINLINECODE375f1654fillna()INLINECODE2db5beb1dropna()INLINECODE5381a811suffixes 来区分它们的来源。

掌握了 merge()`,你就掌握了整合复杂数据集的能力。当你下次面对零散的数据表格时,不妨试着运用这些技巧,让数据流动起来,讲述完整的故事。继续练习,你会发现数据合并其实是一门非常有趣的艺术!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49995.html
点赞
0.00 平均评分 (0% 分数) - 0