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 Dataframe中的字符串数据

    清理给定的 Pandas Dataframe 中的字符串数据通常包括以下几个步骤: 去除不必要的空格和特殊符号; 处理缺失值; 处理重复值; 处理异常值; 标准化字符串数据。 我们以一个示例来说明这些步骤是如何实现的。 假设我们有以下一个名为 df 的 Pandas Dataframe ,其中存储了用户的姓名和电话号码: name phone 0 Alice…

    python-answer 2023年3月27日
    00
  • 使用Python进行RFM分析

    RFM分析指的是根据用户的最近一次购买时间、购买频率以及平均消费金额等因素来对用户进行分群和分析的一种方法。Python是一种非常适合进行RFM分析的语言,因为Python的数据分析工具和机器学习工具非常强大且易于使用。下面将详细讲解如何使用Python进行RFM分析。 1. 数据准备 RFM分析需要的数据通常包括每个用户的购买时间、购买金额以及订单号等信息…

    python-answer 2023年3月27日
    00
  • Pandas DataFrame操作数据增删查改

    现在我来为你详细讲解“Pandas DataFrame操作数据增删查改”的完整攻略。 1. Pandas DataFrame操作数据增加 Pandas DataFrame操作数据的基本方法是使用.loc或.iloc方法。其中.loc方法可以使用标签(label)来定位,.iloc方法可以使用位置(position)来定位。下面是两个示例。 1.1 使用.lo…

    python 2023年5月14日
    00
  • pandas.cut具体使用总结

    当我们需要将连续型数据离散化为一定数量的区间时,pandas提供了cut函数来实现这一过程。本文将介绍pandas.cut函数的具体使用,包括以下几个方面: cut函数的基本语法 通过cut函数实现数据分箱 通过cut函数实现数据分组 cut函数参数详解 实例分析 1. cut函数的基本语法 pandas.cut函数的基本语法如下: pandas.cut(x…

    python 2023年5月14日
    00
  • 使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例

    使用 PyMySQL 查询数据库并把结果保存为列表的步骤如下: 安装 PyMySQL 库 使用 pip 命令安装 PyMySQL 库: pip install PyMySQL 连接数据库 使用 pymysql.connect() 方法连接 MySQL 数据库: import pymysql # 打开数据库连接 db = pymysql.connect(hos…

    python 2023年6月13日
    00
  • R语言rhdf5读写hdf5并展示文件组织结构和索引数据

    R语言是一种流行的数据分析语言,它可以通过rhdf5包读写hdf5格式的数据。hdf5是Hierarchical Data Format的缩写,是一种通用的数据格式,用于存储和组织大量的科学数据。在本攻略中,我将详细讲解使用R语言rhdf5包读写hdf5文件以及展示文件组织结构和索引数据的过程。 安装rhdf5包 在开始之前,我们需要安装并加载rhdf5包。…

    python 2023年6月13日
    00
  • 配置python连接oracle读取excel数据写入数据库的操作流程

    下面是配置 Python 连接 Oracle 读取 Excel 数据并写入数据库的操作流程。 环境准备 Python 3.x环境 cx_Oracle库 openpyxl库 Oracle客户端 Excel文件 安装cx_Oracle和openpyxl库 我们可以使用pip命令来安装需要的库,打开命令行窗口,执行以下命令: pip install cx_Orac…

    python 2023年5月14日
    00
  • 利用pandas将非数值数据转换成数值的方式

    在数据分析过程中,我们通常需要对非数值数据进行数值化处理。常见的非数值数据包括文本、类别和时间等。Pandas是Python中最受欢迎的数据分析工具库之一,提供了灵活方便的数据转换功能来处理非数值数据。 下面是利用Pandas将非数值数据转换为数值类型的方式: 1. 利用map方法将类别数据转换为数值型 实例1:性别数据的转换 假设我们有一组以字符串形式表示…

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