pandas常用表连接merge/concat/join/append详解

pandas常用表连接方法详解

在数据分析过程中,多个表之间的关联式很常见。这时候pandas提供的几种表连接方法——merge、join、concat、append就要上场了。这篇文章会详细讲解这四种方法的用法和区别,通过实例帮助读者深入理解。

merge方法

merge方法实现的是类似于SQL中的表连接。其函数定义为:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, 
         right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, 
         validate=None)

其中需要指定左表和右表,如果是基于index连接,那么要将left_index或right_index置为True;如果是基于列连接,那么需要指定列的名字,left_on,right_on,或者同时指定left_index和right_index为True。

merge的几种连接方式:

  • inner join:内连接,取两表中相同的部分
  • outer join:全连接,取两表中所有的内容
  • left join:左连接,以左表为基础,连接右表。
  • right join:右连接,以右表为基础,连接左表。

示例1

下面的例子演示的是如何基于两个键进行连接:

df1 = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
                    'key2': ['K0', 'K1', 'K0', 'K1'],
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
                    'key2': ['K0', 'K0', 'K0', 'K1'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})

result = pd.merge(df1, df2, on=['key1', 'key2'])

print(result)

输出结果如下:

key1 key2 A B C D
0 K0 K0 A0 B0 C0 D0
1 K1 K1 A1 B1 C3 D3
2 K2 K0 A2 B2 C2 D2

示例2

下面的例子演示外连接的用法:

df1 = pd.DataFrame({'A': ['a1', 'a2', 'a3'], 'B': ['b1', 'b2', 'b3'], 'Key': ['K1', 'K2', 'K3']})
df2 = pd.DataFrame({'C': ['c1', 'c2', 'c3'], 'D': ['d1', 'd2', 'd3'], 'Key': ['K1', 'K2', 'K4']})

result = pd.merge(df1, df2, on='Key', how='outer')

print(result)

输出结果如下:

A B Key C D
0 a1 b1 K1 c1 d1
1 a2 b2 K2 c2 d2
2 a3 b3 K3 nan nan
3 nan nan K4 c3 d3

join方法

join方法是直接在行索引上进行连接,这就要涉及到了缺失值的问题——一些表中有的数据另外一些表中没有,这样在对数据进行join的时候就需要处理好缺失值的情况。

pd.DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

其中,on参数指定的是连接列;how参数指定连接方式,有left、right、outer、inner四种类型,这与merge的参数含义一致;lsuffix和rsuffix分别是左右表中具有相同列名的列的后缀。

示例1

下面的例子演示如何在dataframe之间进行连接:

import pandas as pd

df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})

result = df1.join(df2.set_index('key'), on='key')

print(result)

输出结果如下:

key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3

concat方法

concat方法可以将多个dataframe进行合并。其函数定义为:

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, 
          verify_integrity=False, sort=False, copy=True)

其中,objs为需要合并的DataFrame的序列或字典,axis为合并的方向,0表示竖直方向(行),1表示水平方向(列),join为连接方式,有inner和outer两种。

示例1

下面的例子演示如何在竖直方向上合并两个dataframe:

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']})

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']})

result = pd.concat([df1, df2], axis=0)

print(result)

输出结果如下:

A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
0 A4 B4 C4 D4
1 A5 B5 C5 D5
2 A6 B6 C6 D6
3 A7 B7 C7 D7

示例2

下面的例子演示如何在水平方向上合并多个dataframe:

import pandas as pd

df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
                    'B': ['B8', 'B9', 'B10', 'B11'],
                    'C': ['C8', 'C9', 'C10', 'C11'],
                    'D': ['D8', 'D9', 'D10', 'D11']})

result = pd.concat([df1, df2, df3], axis=1)

print(result)

输出结果如下:

A B C D A B C D A B C D
0 A0 B0 C0 D0 A4 B4 C4 D4 A8 B8 C8 D8
1 A1 B1 C1 D1 A5 B5 C5 D5 A9 B9 C9 D9
2 A2 B2 C2 D2 A6 B6 C6 D6 A10 B10 C10 D10
3 A3 B3 C3 D3 A7 B7 C7 D7 A11 B11 C11 D11

append方法

append方法是在dataframe的尾部添加新的行,其函数定义为:

pd.DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)

其中,other为新的dataframe,ignore_index为True时,新dataframe的索引会被重新编号。

示例1

下面的例子演示如何在dataframe的尾部添加新的行:

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']})

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']})

result = df1.append(df2)

print(result)

输出结果如下:

A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
0 A4 B4 C4 D4
1 A5 B5 C5 D5
2 A6 B6 C6 D6
3 A7 B7 C7 D7

总结

  • merge方法可以基于列进行连接,join方法可以基于索引进行连接;
  • join方法的连接方式是inner、outer、left、right,与merge方法保持一致;
  • concat方法可以在水平和竖直方向上拼接多个dataframe,append方法只能在尾部添加新的行;
  • join方法和merge方法对于缺失值的处理方式是不同的,需要根据具体情况进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas常用表连接merge/concat/join/append详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 在Python Pandas中获取列的数据类型

    在Python Pandas中,我们可以通过dtypes属性获取数据框中各列数据的数据类型。此外,我们也可以使用info()方法来获取每列数据的数据类型和空值情况。 以下是一个示例数据框: import pandas as pd df = pd.DataFrame({‘col1’: [1, 2, 3], ‘col2’: [‘a’, ‘b’, ‘c’], ‘c…

    python-answer 2023年3月27日
    00
  • 使用apply()突出Pandas DataFrame的特定列

    可以使用Pandas的apply()方法来突出显示DataFrame中的特定列。 apply()方法是一个引人注目的方法,它可帮助您在多个列上同时应用函数。它旨在被DataFrame的每一列调用。 下面是一个使用apply()方法来对DataFrame的特定列进行突出显示的例子: import pandas as pd # 创建一个示例DataFrame d…

    python-answer 2023年3月27日
    00
  • 从Python Pandas的日期中获取日期

    获取日期是Pandas数据分析中很基础的操作。对于Pandas的日期类型,有很多方法可以获取日期。从Python Pandas的日期中获取日期可以通过以下步骤实现: 步骤1:导入Pandas 在Python程序中,首先需要导入Pandas库。可以使用以下命令导入: import pandas as pd 步骤2:创建Pandas日期对象 在Python Pa…

    python-answer 2023年3月27日
    00
  • Pandas GroupBy中的最大和最小日期

    下面是Pandas GroupBy中最大和最小日期的攻略及实例说明。 1. Pandas GroupBy概述 Pandas是Python提供的常用数据分析库之一,它提供了一个GroupBy对象,通过对数据进行分组,可以方便地对大量数据进行聚合分析。在实际应用中,经常需要分组后求某些属性在各组中的最大或最小值或其他统计量,并将这些统计量整合成表格以便进一步分析…

    python-answer 2023年3月27日
    00
  • 教你使用Python根据模板批量生成docx文档

    教你使用Python根据模板批量生成docx文档 简介 docx是Microsoft Word的文档格式,使用Python可以根据给定模板批量生成docx文档。本文将会介绍如何使用Python进行docx文件的自动化生成。 安装所需模块 在进行下一步之前,需要安装以下模块: docx:处理docx文件格式的Python库。可通过这个链接进行安装。 pip i…

    python 2023年6月14日
    00
  • 在Pandas中如何在某些匹配条件下进行LEFT ANTI连接

    在Pandas中进行LEFT ANTI连接,实际上是指从左边表中选择不符合特定条件的记录,然后将其保留,并从左右两个表中删除符合条件的记录。这种连接通常用于在两个数据集之间找出差异,它与INNER JOIN和LEFT OUTER JOIN不同,因为它只返回符合条件的记录。 下面是LEFT ANTI连接的完整攻略: 导入Pandas模块和两个数据集 impor…

    python-answer 2023年3月27日
    00
  • Python模拟简易版淘宝客服机器人的示例代码

    接下来我会详细讲解如何实现一个Python模拟简易版淘宝客服机器人并提供两条示例说明。 准备工作 在开始实现之前需要准备以下材料: Python编程环境,可以使用Anaconda / PyCharm等工具。 需要安装第三方库chatterbot用于机器人的拟合训练和应答生成。 安装命令:pip install chatterbot 基础步骤 在准备好环境后,…

    python 2023年6月13日
    00
  • 详解python pandas 分组统计的方法

    下面是详解”Python Pandas分组统计的方法”的完整攻略: 1. pandas分组统计的基本原理 Pandas中使用groupby方法实现分组统计,基本思路是将数据按照指定的列或条件进行分组,然后对每个分组进行统计。具体步骤如下: 指定分组列或条件 使用groupby方法进行分组 对分组后的数据进行统计操作 2. 示例1-对数据进行分组 以titan…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部