Python数据选择与运算(2)多表合并 您所在的位置:网站首页 多表合并函数 Python数据选择与运算(2)多表合并

Python数据选择与运算(2)多表合并

2024-07-10 17:36| 来源: 网络整理| 查看: 265

笔记

目录

一、merge()

(1)使用一个键合并两个数据

(2)使用多个键合并两个数据

(3)使用“how”参数合并

二、Join()

三、concat()

一、merge()

        函数语法:

        pd.merge(left, right, how="inner, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)

        参数解释:

left - 数据顿对象。

right - 另一个数据顿对象

on - 要连接的列(名称)。必须在左侧和右侧数据框对象中找到

left on - 左数据框中用作键的列。可以是列名,也可以是长度等于数据长度的数组。

right on - 右数据框中用作键的列。可以是列名,也可以是长度等于数据长度的数组left index- 如果为True则使用左侧数据中的索引(行标签)作为其连接对于具有多索引(分层)的数据,级别数必须与右数据的连接键数匹配。

right index - 与右数据顿的左索引用法相同。

how -“left"、"right"、"inner"中的一个。默认为"inner"

sort - 按连接键按字典顺序对结果数据帧进行排序,默认为True。设置False将在许多情况下显著提高性能

(1)使用一个键合并两个数据

        关键技术:使用'id键合并两个数据帧,并使用merge0对其执行合并操作

(2)使用多个键合并两个数据

        关键技术:使用'id’键及subiect id'键合并两个数据帧,并使用merge(对其执行合并操作。

import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex','Amy','Allen','Alice','Ayoung'], 'subject_id':['subl','sub2','sub4','sub6','sub5']}) right = pd. DataFrame ({ 'id':[1,2,3,4,5], 'Name': ['Billy','Brian','Bran','Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print(left) print() print(right) #(1)根据id进行拼接 a=pd.merge(left,right,on='id') print("根据id拼接结果:") print(a) print() #(2)根据id与subject_id进行拼接 b=pd.merge(left,right,on=['id','subject_id']) print("根据id与subject_id拼接结果:") print(b)

(3)使用“how”参数合并

         关键技术:how参数指定如何确定结果表中包含哪些键。如果左表或右表中都没有出现组合键,则联接表中的值将为NA。

 

合并方法方法描述left使用左侧对象的键right使用右侧对象的键outer使用键的并集inner使用键的交集

         [例1]采用上面的dataframe,使用Left Join左连接方式合并数据帧

        关键技术:请注意on='subject_id,how='left'。

        [例2]使用RightJoin右连接方式合并数据帧

        关键技术:请注意on='subject_id,how='right'。

#例1 c=pd.merge(left,right,on='subject_id',how='left') print(c) print() #例2 d=pd.merge(left,right,on='subject_id',how='right') print(d)

         [例3]使用outer Join外连接方式合并数据帧

        关键技术:请注意on='subject_id',how='outer'

         [例4]使用inner Join合并数据帧。

        关键技术:请注意on='subiect_id',how='inner'

#例3 e=pd.merge(left,right,on='subject_id',how='outer') print(e) print() #例4 f=pd.merge(left,right,on='subject_id',how='inner') print(f)

二、Join()

        函数语法:

 DataFrame.join(other, on=None, how='left', lsuffix=",rsuffix=" sort=False)

        参数解释:

Self - 表示的是join必须发生在同一数据帧上

Other - 提到需要连接的另一个数据帧

On - 指定必须在其上进行联接的键

How - 提到了连接的类型

lsuffix - 要从左框架的重叠列中使用的后缀

rsuffix - 要从右框架的重叠列中使用的后缀

sort - 对输出进行排序

        [例]使用Python的join0方法,将两个数据表进行合并

        关键技术:join()函数

df = pd.DataFrame({ '序号':[1,2,3,4,5], '质量': ['高','高','低','高','低'], '天气':['坏','好','坏','坏','好'], '是否周末':['是','是','是','否','否']}) df1=df[['序号','质量']] df2=df[['天气','是否周末']] df3=df1.join(df2) print(df3)

三、concat()

        函数语法:

        pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False)

        参数解释:

objs - 这是序列、数据或面板对象的序列或映射

axis - {0,1,...},默认值为0。这是要连接的轴。

join - {'inner','outer'},默认为'outer'。如何处理其他轴上的索引。外部表示联合内部表示交叉

iqnore_index - 布尔值,默认为False。如果为True,则不要使用连接轴上的索引值生成的轴将标记为0...,n-1。

join_axes - 这是索引对象的列表。用于其他(n-1)轴的特定索引,而不是执行内部/外部设置逻辑。 

        [例]使用Concat连接对象

        关键技术:concat函数执行沿轴执行连接操作的所有工作,可以让我们创建不同的对象并进行连接。axis表示选择哪一个方向的堆叠,0为纵向(默认),1为横向

import pandas as pd a = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex','Amy','Allen','Alice','Ayoung'], 'subject_id':['subl','sub2','sub4','sub6','sub5'], 'maker_scored':[90,98,82,69,78]}, index=[1,2,3,4,5] ) b = pd. DataFrame ({ 'id':[1,2,3,4,5], 'Name': ['Billy','Brian','Bran','Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'maker_scored':[89,80,79,97,88]}, index=[1,2,3,4,5] ) c=pd.concat([a,b]) print(c)

        [例]实现将特定的键与被切碎的数据帧的每一部分相关联

        关键技术:假设你想在连接轴上创建一个层次化索引来区分片段,使用keys参数即可达到这个目的。

d=pd.concat([a,b],keys=['x','y']) print(d)

         [例]输出结果不展示行索引

        关键技术:如果DataFrame行索引和当前分析工作无关且不需要展示需要将ignore index设置为True。请注意,索引会完全更改,键也会被覆盖

e=pd.concat([a,b],keys=['x','y'],ignore_index=True) print(e)

        [例]按列合并对象

        关键技术:如果需要沿axis=1合并两个对象,则会追加新列到原对象右侧 

f=pd.concat([a,b],axis=1) print(f)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有