python dataframe merge_python pandas DataFrame.merge用法及代码示例

本文介绍了Python DataFrame的merge方法,用于合并DataFrame或命名的Series对象,支持多种联接类型如左连接、右连接、外连接和内连接。详细解释了参数如on、left_on、right_on等,并提供了代码示例展示如何使用merge方法进行数据合并。
摘要由CSDN通过智能技术生成

合并具有database-style联接的DataFrame或命名的Series对象。

联接在列或索引上完成。如果在列上连接列,则DataFrame索引将被忽略。否则,如果在索引上连接索引或在一个或多个列上建立索引,则将传递索引。

参数:

right:DataFrame 或 named Series要合并的对象。

how:{‘left’, ‘right’, ‘outer’, ‘inner’}, 默认为 ‘inner’要执行的合并类型。

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

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

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

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

on:label 或 list要加入的列或索引级别名称。这些必须在两个DataFrame中都可以找到。如果on为None且未在索引上合并,则默认为两个DataFrame中列的交集。

left_on:label 或 list, 或 array-like要在左侧DataFrame中加入的列或索引级别名称。也可以是左侧DataFrame长度的数组或数组列表。这些数组被视为列。

right_on:label 或 list, 或 array-like要在右侧DataFrame中加入的列或索引级别名称。也可以是正确DataFrame长度的数组或数组列表。这些数组被视为列。

left_index:bool, 默认为 False使用左侧DataFrame中的索引作为连接键。如果它是MultiIndex,则另一个DataFrame中的键数(索引或列数)必须与级别数匹配。

right_index:bool, 默认为 False使用右侧DataFrame中的索引作为连接键。与left_index相同的警告。

sort:bool, 默认为 False在结果DataFrame中按字典顺序对联接键进行排序。如果为False,则联接键的顺序取决于联接类型(how关键字)。

suffixes:tuple of (str, str), 默认为 (‘_x’, ‘_y’)后缀分别适用于左侧和右侧的重叠列名。要在重叠的列上引发异常,请使用(False,False)。

copy:bool, 默认为 True如果为False,请尽可能避免复制。

indicator:bool 或 str, 默认为 False如果为True,则添加一列以输出名为“_merge”的DataFrame,其中包含有关每一行源的信息。如果为字符串,则将在每一行的源上带有信息的列添加到输出DataFrame中,并将该列命名为字符串的值。信息列为Categorical-type,对于仅在‘left’ DataFrame中出现合并键的观测值,将采用“left_only”的值;对于仅在‘right’ DataFrame中出现合并键的观测值,其值将为“right_only”;如果在两者中均找到观测值的合并键,则其值为“both”。

validate:str, 可选参数如果指定,则检查合并是否为指定的类型。

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

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

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

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

0.21.0版中的新功能。

返回值:

DataFrame两个合并对象的DataFrame。

注意:

支持将索引级别指定为on, left_on和right_on在版本0.23.0中添加了参数在版本0.24.0中添加了对合并命名 Series 对象的支持

例子:

>>> df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],

... 'value': [1, 2, 3, 5]})

>>> df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],

... 'value': [5, 6, 7, 8]})

>>> df1

lkey value

0 foo 1

1 bar 2

2 baz 3

3 foo 5

>>> df2

rkey value

0 foo 5

1 bar 6

2 baz 7

3 foo 8

合并lkey和rkey列上的df1和df2。值列后面附加了默认后缀_x和_y。

>>> df1.merge(df2, left_on='lkey', right_on='rkey')

lkey value_x rkey value_y

0 foo 1 foo 5

1 foo 1 foo 8

2 foo 5 foo 5

3 foo 5 foo 8

4 bar 2 bar 6

5 baz 3 baz 7

合并带有指定左右后缀的DataFrame df1和df2,这些后缀附加到任何重叠的列上。

>>> df1.merge(df2, left_on='lkey', right_on='rkey',

... suffixes=('_left', '_right'))

lkey value_left rkey value_right

0 foo 1 foo 5

1 foo 1 foo 8

2 foo 5 foo 5

3 foo 5 foo 8

4 bar 2 bar 6

5 baz 3 baz 7

合并数据帧df1和df2,但如果数据帧具有任何重叠的列,则会引发异常。

>>> df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False))

Traceback (most recent call last):

...

ValueError:columns overlap but no suffix specified:

Index(['value'], dtype='object')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值