python dataframe merge_Pandas DataFrame.merge()用法详解

本文概述

Pandas merge()定义为以下过程:将两个数据集合为一个, 并根据公共属性或列对齐行。它是DataFrame对象之间所有标准数据库联接操作的入口点:

句法

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)

参数

右:DataFrame或命名的Series

它是一个与DataFrame合并的对象。

方式:{‘左’, ‘右’, ‘外’, ‘内’}, 默认为’内’

要执行的合并类型。

left:仅使用左框架中的键, 类似于SQL左外部联接;保留关键顺序。

右:它仅使用右框架中的键, 类似于SQL右外部联接;保留关键顺序。

外部:它使用了两个框架中键的并集, 类似于SQL完全外部联接;按字典顺序对键进行排序。

内部:它使用两个框架中关键点的交集, 类似于SQL内部联接;保留左键的顺序。

开启:标签或列表

它是要连接的列或索引级别的名称。必须在左侧和右侧的DataFrame中都可以找到它。如果on为None且未在索引上合并, 则默认为两个DataFrame中列的交集。

left_on:标签或列表, 或类似数组

它是左侧DataFrame中的列或索引级别名称, 用作键。它可以是长度等于DataFrame长度的数组。

right_on:标签或列表, 或类似数组

它是来自右侧DataFrame的列或索引级别名称, 用作键。它可以是长度等于DataFrame长度的数组。

left_index:布尔值, 默认为False

如果为true, 它将使用左侧DataFrame的索引作为连接键。对于MultiIndex(分层), 另一个DataFrame中的许多键(索引或某些列)应与级别数匹配。

right_index:布尔值, 默认为False

它使用来自右侧DataFrame的索引作为连接键。它的用法与left_index相同。

排序:布尔值, 默认为False

如果为True, 它将在结果DataFrame中按字典顺序对连接键进行排序。否则, 联接键的顺序取决于联接类型(how关键字)。

后缀:(str, str)的元组, 默认值(‘_x’, ‘_y’)

后缀适用于分别在左侧和右侧DataFrame中重叠列名称。列使用(False, False)值在重叠时引发异常。

复制:bool, 默认为True

如果为True, 则返回DataFrame的副本。

否则, 可以避免复制。

指示符:bool或str, 默认为False

如果为True, 它将添加一列以输出DataFrame” _merge”, 其中包含有关每一行源的信息。如果是字符串, 则将在每行的源上包含信息的列添加到输出DataFrame, 并将该列命名为字符串的值。信息列定义为分类类型, 其值为:

合并键仅出现在DataFrame的”左侧”的观测值的” left_only”,

为观察项定义了” right_only”, 其中合并键仅出现在DataFrame的”右边”,

如果在两个视图中都找到观察的合并键, 则”两者”。

验证:str, 可选

如果指定, 它将检查下面给出的合并类型:

” one_to_one”或” 1:1″:它检查合并键在左右数据集中是否唯一。

” one_to_many”或” 1:m”:它检查合并键在仅左数据集中是否唯一。

” many_to_one”或” m:1″:它检查合并键在仅正确的数据集中是否唯一。

” many_to_many”或” m:m”:允许, 但不进行检查。

例1:在一个键上合并两个DataFrame

# import the pandas library

import pandas as pd

left = pd.DataFrame({

'id':[1, 2, 3, 4], 'Name': ['John', 'Parker', 'Smith', 'Parker'], 'subject_id':['sub1', 'sub2', 'sub4', 'sub6']})

right = pd.DataFrame({

'id':[1, 2, 3, 4], 'Name': ['William', 'Albert', 'Tony', 'Allen'], 'subject_id':['sub2', 'sub4', 'sub3', 'sub6']})

print (left)

print (right)

输出

id Name subject_id

0 1 John sub1

1 2 Parker sub2

2 3 Smith sub4

3 4 Parker sub6

id Name subject_id

0 1 William sub2

1 2 Albert sub4

2 3 Tony sub3

3 4 Allen sub6

示例2:在多个键上合并两个DataFrame:

import pandas as pd

left = pd.DataFrame({

'id':[1, 2, 3, 4, 5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1', 'sub2', 'sub4', 'sub6', 'sub5']})

right = pd.DataFrame({

'id':[1, 2, 3, 4, 5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2', 'sub4', 'sub3', 'sub6', 'sub5']})

print pd.merge(left, right, on='id')

输出

id Name_x subject_id_x Name_y subject_id_y

0 1 John sub1 William sub2

1 2 Parker sub2 Albert sub4

2 3 Smith sub4 Tony sub3

3 4 Parker sub6 Allen sub6

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值