Python Pandas pandas.DataFrame.merge函数方法的使用

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。pandas.DataFrame.merge() 是一个强大的工具,用于将两个 DataFrame 按照指定的列或索引进行合并。这类似于 SQL 中的 JOIN 操作。本文主要介绍一下Pandas中pandas.DataFrame.merge方法的使用。

DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)     源代码

通过按列或索引,执行数据库的连接操作来合并DataFrame对象。
如果通过列连接列,则将忽略DataFrame索引。否则,如果通过列或列上的索引或索引连接索引,则将传递索引。

参数:

right: DataFrame

how{‘left’, ‘right’, ‘outer’, ‘inner’},默认'inner'

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

2)right:仅使用右框架中的键,类似于SQL右外连接; 保留关键顺序

3)outer:使用来自两个帧的键的并集,类似于SQL全外连接; 按字典顺序排序键

4)inner:使用两个帧的键交集,类似于SQL内连接; 保留左键的顺序

on:标签或列表

要加入的列或索引级别名称。这些必须在两个DataFrame中找到。

如果on为None且未合并索引,则默认为两个DataFrame中列的交集。

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

要在左侧DataFrame中连接的列级或索引级别名称。

也可以是左数据帧长度的数组或数组列表。这些数组被视为列。

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

要在右侧DataFrame中连接的列级或索引级别名称。

也可以是右侧DataFrame长度的数组或数组列表。这些数组被视为列。

left_index:布尔值,默认为False

使用左侧DataFrame中的索引作为连接键。如果是MultiIndex,

则其他DataFrame中的键数(索引或列数)必须与级别数相匹配

right_index:布尔值,默认为False

使用右侧DataFrame中的索引作为连接键。与left_index相同的说明

sort:布尔值,默认为False

在结果DataFrame中按字典顺序对连接键进行排序。如果为False

则连接键的顺序取决于连接类型(关键字如何)

suffixes:2长度序列(元组,列表,...)

后缀分别应用于左侧和右侧的重叠列名称

copy:布尔值,默认为True

如果为False,则不要复制不必要地数据

indicator:布尔值或字符串,默认为False

如果为True,则添加一列以输出名为“_merge”的DataFrame

其中包含每行源的信息。如果str,具有每行源的信息的列,

将被添加到输出DataFrame,并且列将被命名为str的值。

信息列为分类型,对于其合并键仅出现在“left”DataFrame中,

观察值为“left_only”,对于其合并键仅出现在“right”DataFrame中,

观察值为“right_only”,如果为获取合并密钥可以在两者中找到。

validatestr,默认None

如果指定,则检查merge是否为指定类型。

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

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

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

“many_to_many”或“m:m”:允许,但不会导致检查。

版本0.21.0中的新功能。

返回:

mergedDataFrame

如果输出类型是DataFrame的子类,

则输出类型将与“left”相同。

版本0.23.0中添加了对指定索引级别的支持,即onleft_on和 right_on参数

例如,

import pandas as pd

# 创建 DataFrame A
A = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],
                  'value': [1, 2, 3, 4]})

# 创建 DataFrame B
B = pd.DataFrame({'rkey': ['foo', 'bar', 'qux'],
                  'value': [5, 6, 7]})

# 使用 merge 方法,按照 'lkey' 和 'rkey' 列进行外连接
result = A.merge(B, left_on='lkey', right_on='rkey', how='outer')

print(result)

'''
  lkey  value_x rkey  value_y
0  foo      1.0  foo      5.0
1  foo      4.0  foo      5.0
2  bar      2.0  bar      6.0
3  baz      3.0  NaN      NaN
4  NaN      NaN  qux      7.0
'''

推荐阅读
cjavapy编程之路首页