python pandas数据合并
0 背景
pd.merge()
是 pandas 库中一个非常重要的函数,用于将两个或多个 DataFrame 对象按照一个或多个键进行合并。类似于 SQL 中的 JOIN 操作,它可以根据一个或多个键将不同的 DataFrame 结合在一起,从而形成一个新的 DataFrame。本文重点介绍关于pd.merge()
的使用。
关于数据表之间的融合, 我们之前也进行了相关仔细的介绍, 可供参考:
1 使用
基本语法
def merge(
left: DataFrame | Series,
right: DataFrame | Series,
how: MergeHow = "inner",
on: IndexLabel | None = None,
left_on: IndexLabel | None = None,
right_on: IndexLabel | None = None,
left_index: bool = False,
right_index: bool = False,
sort: bool = False,
suffixes: Suffixes = ("_x", "_y"),
copy: bool | None = None,
indicator: str | bool = False,
validate: str | None = None,
) -> DataFrame:
pd.merge()
可以将两个DataFrame或Series进行合并,它类似于 SQL 中的 JOIN 操作,最终返回一个合并后的DataFrame。该函数的主要参数说明如下:
-
left: 第一个要合并的 DataFrame 或 Series。 -
right: 第二个要合并的 DataFrame 或 Series。 -
how: 合并的类型。可以是 **’left’, ‘right’, ‘outer’, ‘inner’**。默认是 ‘inner’。 -
‘left’: 只使用左 DataFrame 的键。 -
‘right’: 只使用右 DataFrame 的键。 -
‘outer’: 使用左右 DataFrame 的并集作为键。 -
‘inner’: 使用左右 DataFrame 的交集作为键。 -
on: 用于连接的列名。必须在左右 DataFrame 中都存在。如果未指定,并且没有其他连接键被指定,那么 DataFrame 中的**列的交集(共有的键)**将被用作连接键。否则需要用 left_on 和 right_on 参数来指定左右的数据表。 -
left_on: 左 DataFrame 中用作连接键的列。 -
right_on: 右 DataFrame 中用作连接键的列。 -
left_index: 如果为 True,则使用左 DataFrame 的索引(行标签)作为其连接键。在多索引的情况下,级别的数量必须与来自右 DataFrame 的连接键的数量匹配。 -
right_index: 同 left_index,但用于右 DataFrame。 -
sort: 根据连接键对合并后的数据进行排序,默认为 False。 -
suffixes: 一个元组,用于添加到重叠列名的末尾。默认为 (‘_x’, ‘_y’)。 -
indicator: 如果设置为 True,则会向输出 DataFrame 添加一个名为 “_merge” 的特殊列,它可以指示每行的合并来源(’left_only’、’right_only’ 或 ‘both’)。
连接的键
默认使用共有的键, 在这里是B
列
pd.merge(df1, df2)
A B C
0 1 5 2
1 3 5 2
指定共有键, 在实际学习和工作中, 为了代码的可阅读性,推荐使用on
参数.
pd.merge(df1, df2, on='B')
A B C
0 1 5 2
1 3 5 2
指定多个键. 上面的例子中, 我们仅选择了一个列作为连接键, 我们也可以使用多个列作为键
pd.merge(df3, df4, on=['A','B'], how='outer')
# 本例中未提供多个共有列, 这里仅举例说明
索引连接
我们也可以直接指定索引进行连接,将left_index
和right_index
指定为True
,合并时将会以两个表的索引作为连接键
pd.merge(df1, df2, left_index=True, right_index=True)
A B_x B_y C
0 1 5 5 2
1 2 6 7 3
使用 suffixes
指定共有列作为连接键的后缀, 以区分两个数据表.
pd.merge(df1, df2, left_index=True, right_index=True, suffixes=('_1', '_2'))
# suffixes的选项是一个元组.
A B_1 B_2 C
0 1 5 5 2
1 2 6 7 3
多连接键
有时我们需要复杂的条件进行合并, 可能需要多个列同时判断, 因为我们也可以使用多连接键的形式进行合并, 合并方法是将在on
/ left_on
/ right_on
参数中传入列表
pd.merge(df3, df4, on=['A','B'], how='outer')
pd.merge(df1, df2, left_on=['A', 'B'], right_on=['B', 'C'], how='left')
A B_x B_y C
0 1 5 NaN NaN
1 2 6 NaN NaN
2 3 5 NaN NaN
连接方法
类似于sql的join方法, 我们可以使用how参数可以指定数据用哪种方法进行合并,可以设置为inner
、
outer
、left
或right
, 默认是inner
。
pd.merge(df1, df2, on='B')
pd.merge(df1, df2, on='B', how='inner')
A B C
0 1 5 2
1 3 5 2
pd.merge(df1, df2, on='B', how='left')
A B C
0 1 5 2.0
1 2 6 NaN
2 3 5 2.0
pd.merge(df1, df2, on='B', how='right')
A B C
0 1.0 5 2
1 3.0 5 2
2 NaN 7 3
pd.merge(df1, df2, on='B', how='outer')
A B C
0 1.0 5 2.0
1 3.0 5 2.0
2 2.0 6 NaN
3 NaN 7 3.0
连接指示
有时为了区别合并后的每行的数据来源是来源于左右的哪个表的内容, 我们可以使用indicator
参数显示连接方式。如果我们设置indicator
设置为True
,合并后的表会增加一个_merge
的列,这列显示每一行数据是来源于哪里。_merge
列有left_only
, right_only
, both
三个取值, 表示只存在左表中, 只存在右表中, 都有。
pd.merge(df1, df2, on='B', indicator=True, how='outer')
A B C _merge
0 1.0 5 2.0 both
1 3.0 5 2.0 both
2 2.0 6 NaN left_only
3 NaN 7 3.0 right_only
2 关于
pd.merge()
是 pandas 数据处理中非常强大的工具,适用于各种复杂的数据合并需求。就像在实际的SQL中我们需要经常通过join进行多个表之间的关联, pd.merge()
也是pandas中重要的关联合并操作函数。
如果你觉得这期内容不错的话, 欢迎点赞, 在看, 关注我的微信公众号
原文始发于微信公众号(其之):python pandas数据合并
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204744.html