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日

相关文章

  • 使用Pandas读取CSV文件的特定列

    如果需要从CSV文件中读取特定列,Pandas提供了很方便的方法。下面是完整攻略: 步骤1:导入Pandas模块 在使用Pandas前,需要先导入Pandas模块。可以使用以下代码进行导入: import pandas as pd 这样就可以在代码中使用Pandas库提供的各种函数和方法。 步骤2:读取CSV文件 使用Pandas的read_csv()方法读…

    python-answer 2023年3月27日
    00
  • Python Pandas数据结构简单介绍

    Python Pandas数据结构简单介绍 Pandas简介 Pandas是一个数据处理的工具,在数据分析领域非常常用,它提供了很多功能来处理和操作数据。使用Pandas,我们可以轻松地处理各种格式的数据集,例如: CSV、Excel、SQL或者JSON等,并对数据进行转换、排序、切片、重塑、合并等操作。 Pandas数据结构 Pandas提供了两种核心数据…

    python 2023年6月13日
    00
  • 如何在Pandas中根据条件替换列中的值

    当我们需要替换Pandas中列的值时,通常可以根据条件进行筛选,然后对筛选后的数据进行修改。 以下是使用 Pandas 在列中根据条件替换值的攻略: 步骤1:导入必要的库和数据 首先,我们需要导入Pandas库并读取一个数据集。在本示例中,我们将使用pandas内置数据集“titanic”。 import pandas as pd # 读取内置数据集 df …

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

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

    python-answer 2023年3月27日
    00
  • 在Pandas中使用散点矩阵绘制配对图

    散点矩阵(Scatter Matrix)是基于 Pandas 的一个绘图函数。它们绘制一组变量的散点图矩阵。散点图矩阵对于观察多个相互关联的变量之间的关系非常有用。在 Pandas 中,我们可以使用 scatter_matrix 函数实现散点矩阵的绘制。 下面我们就来讲一下如何在 Pandas 中使用 scatter_matrix 绘制配对图,并提供一个例子…

    python-answer 2023年3月27日
    00
  • Pandas-DataFrame知识点汇总

    Pandas-DataFrame知识点汇总 什么是DataFrame DataFrame是Pandas中最强大的数据结构之一。它可以看作是由Series组成的表格。DataFrame中的每列称为一个Series,而行则表示表格中的观察。以下是创建DataFrame的一种方法: import pandas as pd data = { ‘name’: [‘Al…

    python 2023年5月14日
    00
  • pandas如何处理缺失值

    当我们处理数据时,经常会遇到数据缺失的情况,而pandas是一个强大的数据处理工具,提供了多种处理缺失值的方法。 处理缺失值的方法 pandas提供了三种处理缺失值的方法,分别是: 1. 删除缺失值 使用dropna()方法可以删除包含缺失值的行或列。例如: import pandas as pd import numpy as np df = pd.Dat…

    python 2023年5月14日
    00
  • 基于pandas数据样本行列选取的方法

    当我们使用pandas进行数据分析时,选取数据样本中特定的行和列是非常常见的操作。在pandas中,我们可以使用不同的方法来进行数据样本的行列选取,以下是一些常用的方法: 1. loc方法 loc方法可以通过标签或布尔值标识符选取数据样本中的行和列。具体方法为: df.loc[row_label, column_label] 其中row_label可以是单个…

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