千家信息网

pandas中如何使用merge函数

发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,这篇文章给大家分享的是有关pandas中如何使用merge函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mergemerge函数方法类似SQL里的join,可以是pd.
千家信息网最后更新 2025年02月09日pandas中如何使用merge函数

这篇文章给大家分享的是有关pandas中如何使用merge函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

merge

merge函数方法类似SQL里的join,可以是pd.merge或者df.merge,区别就在于后者待合并的数据是

pd.merge(    left: 'DataFrame | Series',    right: 'DataFrame | Series',    how: 'str' = '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' = True,    indicator: 'bool' = False,    validate: 'str | None' = None,) -> 'DataFrame'

在函数方法中,关键参数含义如下:

  • left: 用于连接的左侧数据

  • right: 用于连接的右侧数据

  • how: 数据连接方式,默认为 inner,可选outer、left和right

  • on: 连接关键字段,左右侧数据中需要都存在,否则就用left_on和right_on

  • left_on: 左侧数据用于连接的关键字段

  • right_on: 右侧数据用于连接的关键字段

  • left_index: True表示左侧索引为连接关键字段

  • right_index: True表示右侧索引为连接关键字段

  • suffixes: ‘Suffixes’ = (’_x’, ‘_y’),可以自由指定,就是同列名合并后列名显示后缀

  • indicator: 是否显示合并后某行数据的归属来源

接下来,我们就对该函数功能进行演示

基础合并

In [55]: df1 = pd.DataFrame({'key': ['foo', 'bar', 'bal'],    ...:                     'value2': [1, 2, 3]})In [56]: df2 = pd.DataFrame({'key': ['foo', 'bar', 'baz'],    ...:                     'value1': [5, 6, 7]})In [57]: df1.merge(df2)Out[57]:    key  value2  value10  foo       1       51  bar       2       6

其他连接方式

In [58]: df1.merge(df2, how='left')Out[58]:    key  value2  value10  foo       1     5.01  bar       2     6.02  bal       3     NaNIn [59]: df1.merge(df2, how='right')Out[59]:    key  value2  value10  foo     1.0       51  bar     2.0       62  baz     NaN       7In [60]: df1.merge(df2, how='outer')Out[60]:    key  value2  value10  foo     1.0     5.01  bar     2.0     6.02  bal     3.0     NaN3  baz     NaN     7.0In [61]: df1.merge(df2, how='cross')Out[61]:   key_x  value2 key_y  value10   foo       1   foo       51   foo       1   bar       62   foo       1   baz       73   bar       2   foo       54   bar       2   bar       65   bar       2   baz       76   bal       3   foo       57   bal       3   bar       68   bal       3   baz       7

指定连接键

可以指定单个连接键,也可以指定多个连接键

In [62]: df1 = pd.DataFrame({'lkey1': ['foo', 'bar', 'bal'],    ...:                     'lkey2': ['a', 'b', 'c'],    ...:                     'value2': [1, 2, 3]})In [63]: df2 = pd.DataFrame({'rkey1': ['foo', 'bar', 'baz'],    ...:                     'rkey2': ['a', 'b', 'c'],    ...:                     'value2': [5, 6, 7]})    In [64]: df1Out[64]:   lkey1 lkey2  value20   foo     a       11   bar     b       22   bal     c       3In [65]: df2Out[65]:   rkey1 rkey2  value20   foo     a       51   bar     b       62   baz     c       7In [66]: df1.merge(df2, left_on='lkey1', right_on='rkey1')Out[66]:   lkey1 lkey2  value2_x rkey1 rkey2  value2_y0   foo     a         1   foo     a         51   bar     b         2   bar     b         6In [67]: df1.merge(df2, left_on=['lkey1','lkey2'], right_on=['rkey1','rkey2'])Out[67]:   lkey1 lkey2  value2_x rkey1 rkey2  value2_y0   foo     a         1   foo     a         51   bar     b         2   bar     b         6

指定索引为键

Out[68]: df1.merge(df2, left_index=True, right_index=True)Out[68]:   lkey1 lkey2  value2_x rkey1 rkey2  value2_y0   foo     a         1   foo     a         51   bar     b         2   bar     b         62   bal     c         3   baz     c         7

设置重复列后缀

In [69]: df1.merge(df2, left_on='lkey1', right_on='rkey1', suffixes=['左','右'])Out[69]:   lkey1 lkey2  value2左 rkey1 rkey2  value2右0   foo     a        1   foo     a        51   bar     b        2   bar     b        6

连接指示

新增一列用于显示数据来源

In [70]: df1.merge(df2, left_on='lkey1', right_on='rkey1', suffixes=['左','右'], how='outer',    ...:           indicator=True    ...:       )Out[70]:   lkey1 lkey2  value2左 rkey1 rkey2  value2右      _merge0   foo     a      1.0   foo     a      5.0        both1   bar     b      2.0   bar     b      6.0        both2   bal     c      3.0   NaN   NaN      NaN   left_only3   NaN   NaN      NaN   baz     c      7.0  right_only

感谢各位的阅读!关于"pandas中如何使用merge函数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0