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

yizhihongxing

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日

相关文章

  • pandas处理csv文件的方法步骤

    下面是pandas处理csv文件的方法步骤的完整攻略: 步骤1:导入pandas库 在使用pandas处理csv文件前,需要先导入pandas库,方法如下: import pandas as pd 其中,“pd”是pandas的惯常简写,遵循这个简写可以让我们的代码更加简洁明了。 步骤2:读取CSV文件 接下来需要读取CSV文件,pandas提供了一些方便易…

    python 2023年5月14日
    00
  • Python Pandas – 检查两个共享封闭端点的Interval对象是否重叠

    Python Pandas是一个强大的数据分析库,它提供了丰富的数据处理和分析工具,其中包括对interval对象的支持。在Pandas中,可以使用interval_range()函数来创建interval对象,可以使用overlaps()方法来检查interval对象是否重叠。 要检查两个共享封闭端点的interval对象是否重叠,可以使用overlaps…

    python-answer 2023年3月27日
    00
  • Python使用read_csv读数据遇到分隔符问题的2种解决方式

    当我们在使用 Python 中的 Pandas 库读取 CSV 文件时,通常情况下会使用 read_csv 函数,但是在读取数据时,有时会遇到分隔符的问题。本篇攻略将为大家介绍两种解决这个问题的方式。 方式一:指定分隔符 当 CSV 文件的分隔符与默认的逗号(,)不一样时,我们可以通过 sep 参数来指定分隔符。例如,如果 CSV 文件的分隔符为分号(;),…

    python 2023年5月14日
    00
  • 如何使用Pandas显示数据框架的所有行

    使用Pandas显示数据框架的所有行的步骤如下: 步骤1:导入Pandas库 首先,我们需要导入Pandas库。可以使用以下命令完成导入: import pandas as pd 步骤2:加载数据集 接下来,我们需要加载数据集。我们可以使用Pandas库中的read_csv函数加载CSV格式的数据集。以下是使用read_csv函数加载数据集的示例代码: da…

    python-answer 2023年3月27日
    00
  • Pandas操作两个Excel实现数据对应行的合并

    Pandas是Python中一个强大的数据处理库,我们可以使用它来完成相关的数据操作。下面我将详细讲解“Pandas操作两个Excel实现数据对应行的合并”的完整攻略,包括两条示例说明。 一、读取Excel文件 要实现数据对应行的合并,首先需要读取两个Excel文件的数据。我们可以使用pandas库的read_excel函数来实现,代码如下: import …

    python 2023年6月13日
    00
  • 在Pandas中对分组应用操作

    当我们需要将数据根据一定规则进行分组并对每组进行操作时,Pandas提供了非常便捷的分组应用操作方法。下面将详细讲解在Pandas中对分组应用操作的完整攻略,包括基本的分组、聚合函数、筛选特定组合、使用transform函数以及apply函数等。 基本的分组 将数据按照某一列或多个列的值进行分组,并对每组进行操作。 示例代码: import pandas a…

    python-answer 2023年3月27日
    00
  • 如何在Pandas中计算以月为单位的Timedelta

    计算以月为单位的 Timedelta 是 Pandas 中比较常见的需求,但是由于月的天数不一致,因此需要特定的计算方法。以下是在 Pandas 中计算以月为单位的 Timedelta 的完整攻略: 1. 创建数据 首先,我们需要创建一个包含两个日期的数据,作为计算 Timedelta 的基础。以下是一个示例数据: import pandas as pd d…

    python-answer 2023年3月27日
    00
  • Python与Pandas和XlsxWriter组合工作 – 2

    Python是一种广泛使用的编程语言,而Pandas是Python中的一种数据处理库,可以方便地进行数据的读取、处理和转换。而XlsxWriter则是Python中的一种Excel输出工具,可以将Pandas或其他数据类型的数据输出成Excel文件。 将这三种工具组合起来使用可以方便地处理大量数据并将结果输出成Excel格式,下面将逐步介绍这种工作方式的具体…

    python-answer 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部