Python中Merge使用的示例详解

 更新时间:2023年02月21日 14:04:31   作者:Memory_ss  
Python里的merger函数是数据分析工作中最常见的函数之一,类似于MySQL中的join函数和Excel中的vlookup函数。本文将通过一些简单的实力和大家聊聊Merge的使用,需要的可以了解一下

merage

pandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来,语法如下:

merge(left, right, how=‘inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', ‘_y'), copy=True, indicator=False)

作为一个功能完善、强大的语言,python的pandas库中的merge()支持各种内外连接。

  • left与right:两个不同的DataFrame
  • how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner
  • on : 指的是用于连接的列索引名称。必须存在右右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键
  • left_on:左则DataFrame中用作连接键的列名;这个参数中左右列名不相同,但代表的含义相同时非常有用。
  • right_on:右则DataFrame中用作 连接键的列名
  • left_index:使用左则DataFrame中的行索引做为连接键
  • right_index:使用右则DataFrame中的行索引做为连接键
  • sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能
  • suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(’_x’,’_y’)
  • copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能
  • indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both)
#coding=utf-8
import pandas as pd
import numpy as np

class PanMerge():
    def PanMer(self):
        data =  pd.DataFrame([{"id": 0, "name": 'lxh', "age": 20, "cp": 'lm'}, {"id": 1, "name": 'xiao', "age": 40, "cp": 'ly'},{"id": 2, "name": 'hua', "age": 4, "cp": 'yry'}, {"id": 3, "name": 'be', "age": 70, "cp": 'old'}])
        data1 = pd.DataFrame([{"id": 100, "name": 'lxh', 'cs': 10}, {"id": 101, "name": 'xiao', 'cs': 40},{"id": 102, "name": 'hua2', 'cs': 50}])
        data2 = pd.DataFrame([{"id": 0, "name": 'lxh', 'cs': 10}, {"id": 101, "name": 'xiao', 'cs': 40},{"id": 102, "name": 'hua2', 'cs': 50}])
        data3 = pd.DataFrame([{"mid": 0, "mname": 'lxh', 'cs': 10}, {"mid": 101, "mname": 'xiao', 'cs': 40},{"mid": 102, "mname": 'hua2', 'cs': 50}])
        # print(data)
        # print(data1)
        # print(data2)
        df1 = pd.merge(data,data1,on="name",how="left",suffixes=('_a','_b'))#相同的其他类名用_a和_b标注
        df2 = pd.merge(data, data2, on=("name", "id")) #多列名做为内链接的连接键
        df3 = pd.merge(data, data2)  #不指定on则以两个DataFrame的列名交集做为连接键

        # 使用右边的DataFrame的行索引做为连接键
        indexed_data1 = data1.set_index("name")##设置行索引名称
        # print(indexed_data1)
        df5 = pd. merge(data, indexed_data1, left_on='name', right_index=True) #"使用右边的DataFrame的行索引做为连接键\r\n"
        print(df5)
        print('左外连接\r\n',pd.merge(data,data1,on="name",how="left",suffixes=('_a','_b')))
        print('左外连接1\r\n',pd.merge(data1,data,on="name",how="left"))
        print ('右外连接\r\n',pd.merge(data,data1,on="name",how="right"))

        # 当左右两个DataFrame的列名不同,当又想做为连接键时可以使用left_on与right_on来指定连接键
        df6=pd.merge(data,data3,left_on=["name","id"],right_on=["mname","mid"])
        print(df6)

join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame。

其中参数的意义与merge方法基本相同, 只是join方法默认为左外连接how = left。

 dj1=pd.DataFrame([{"id":0,"name":'lxh',"age":20,"cp":'lm'},{"id":1,"name":'xiao',"age":40,"cp":'ly'},{"id":2,"name":'hua',"age":4,"cp":'yry'},{"id":3,"name":'be',"age":70,"cp":'old'}],index=['a','b','c','d'])
    dj2=pd.DataFrame([{"sex":0},{"sex":1},{"sex":2}],index=['a','b','e'])
    print(dj1)
    print(dj2)
    df7= dj1.join(dj2)
    print(df7)

    print('使用右连接\r\n', dj1.join(dj2, how="right") ) # 这里出自动屏蔽了data1中没有index=c,d的那行数据;等价于data1.join(data)
    print('使用内连接\r\n', dj1.join(dj2, how='inner'))
    print('使用全外连接\r\n', dj1.join(dj2, how='outer'))

还有一种连接方式:concat

concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。

与数据库不同的是concat不会去重,要达到去重的效果可以使用drop_duplicates方法

     dc1 = pd.DataFrame({'city': ['Chicago', 'San Francisco', 'New York City'], 'rank': range(1, 4)})
        dc2 = pd.DataFrame({'city': ['Chicago', 'Boston', 'Los Angeles'], 'rank': [1, 4, 5]})
        print(dc1)
        print(dc2)
        # print('按轴进行内连接\r\n', pd.concat([dc1, dc2], join="inner", axis=0))
        dc3=pd.concat([dc1,dc2],join="inner", axis=0) #axis=1横向操作,axis=0纵向操作
        print(dc3)
        dc4=pd.concat([dc1,dc2],keys=['a','b']) #进行外连接并指定keys(行索引) 用a,b 进行标识
        print(dc4)

        dc5 = pd.concat([dc1,dc2],ignore_index=True).drop_duplicates() #完全一样时候,去重数据
        print(dc5)


if __name__ == '__main__':
    PanMerge().PanMer()

到此这篇关于Python中Merge使用的示例详解的文章就介绍到这了,更多相关Python Merge内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Python中range和xrange的区别

    浅谈Python中range和xrange的区别

    本篇文章主要介绍了浅谈Python中range和xrange的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • pandas中的DataFrame数据遍历解读

    pandas中的DataFrame数据遍历解读

    这篇文章主要介绍了pandas中的DataFrame数据遍历解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python使用pymongo模块操作MongoDB的方法示例

    Python使用pymongo模块操作MongoDB的方法示例

    这篇文章主要介绍了Python使用pymongo模块操作MongoDB的方法,结合实例形式分析了Python基于pymongo模块连接MongoDB数据库以及增删改查与日志记录相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Python 字符串使用多个分隔符分割成列表的2种方法

    Python 字符串使用多个分隔符分割成列表的2种方法

    本文主要介绍了Python 字符串使用多个分隔符分割成列表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 上帝为你开了一扇窗之Tkinter常用函数详解

    上帝为你开了一扇窗之Tkinter常用函数详解

    构思了很长一段时间,总感觉不够有趣,于是打算出一个完整的系列,让大家一起感受python的乐趣.这个系列着重以系统库中的tkinter为中心来围绕进行编写.因此我们的第一步是导入模块, 第一节就来为大家建立一个窗口 ,需要的朋友可以参考下
    2021-06-06
  • python排序函数sort()与sorted()的区别

    python排序函数sort()与sorted()的区别

    这篇文章主要介绍了python排序函数sort()与sorted()的区别,需要的朋友可以参考下
    2018-09-09
  • 解决遇到PermissionError:[Errno 13] Permission denied:XXXX错误的问题

    解决遇到PermissionError:[Errno 13] Permission den

    遇到"PermissionError:[Errno 13] Permission denied"通常是权限不足导致,解决此问题的方法包括检查并更改文件权限,使用管理员权限运行命令,或接触文件所有者,这些步骤有助于确保用户具有执行操作所需的权限,有时,文件或目录可能被锁定
    2024-09-09
  • Python 内置模块 argparse快速入门教程

    Python 内置模块 argparse快速入门教程

    argparse模块是Python内置的用于命令项选项与参数解析的模块,argparse模块可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数,这篇文章主要介绍了快速入门Python内置模块argparse,需要的朋友可以参考下
    2023-06-06
  • Python Pytorch深度学习之神经网络

    Python Pytorch深度学习之神经网络

    今天小编就为大家分享一篇关于Pytorch神经网络的文章,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-10-10
  • python conda操作方法

    python conda操作方法

    这篇文章主要介绍了python conda操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09

最新评论