本文作者:云初冀北

Python中Merge使用的示例详解

Python中Merge使用的示例详解摘要: meragepandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来,语法如下:merge(lef...

?=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) 

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

left与right:两个不同的dataframehow:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inneron : 指的是用于连接的索引名称。必须存在右右两个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内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:goliszhou@gmail.com
$

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,165人围观)参与讨论

还没有评论,来说两句吧...