zoukankan      html  css  js  c++  java
  • Pandas数据合并方法merge()、concat()、combine_first()方法,数据的重塑和矩阵转置等操作的实现

    阅读提示

    本文将提到Pandas数据合并方法merge()、concat()、combine_first()方法,数据的重塑和矩阵转置等操作的实现


    在这里插入图片描述

    一、数据合并

    pandas提供了三种主要方法可以用于数据合并:

    • pandas.merge() 方法 : 数据库风格的合并
    • pandas.concat() 方法 : 轴向连接,沿着一条轴将多个对象堆叠到一起
    • combine_first() 方法 :合并重叠数据

    1、pandas.merge() 方法

    将两个DataFrame合并

    以列名为连接键
    df1 = DataFrame({'name':['Carl','Lucy','a','b','c'],'data1': range(5)})
    df2 = DataFrame({'name':['Carl','Lucy','x','y','z'],'data2': range(5)})
    '''
    df1
           		name	data1
            0	Carl	0
            1	Lucy	1
            2	a		2
            3	b		3
            4	c		4
    df2
                name	data2
            0	Carl	0
            1	Lucy	1
            2	x		2
            3	y		3
            4	z		4      
    '''
    #将df1 df2合并,以name为键(默认参数 how = 'inner' 内连接)
    pd.merge(df1, df2, on = 'name', how = 'inner') # 内连接
    '''
            	name	data1	data2
            0	Carl	0		0
            1	Lucy	1		1
    '''
    pd.merge(df1,df2,on = 'name',how = 'left')  # 左连接
    '''
                name	data1	data2
            0	Carl	0		0.0
            1	Lucy	1		1.0
            2	a		2		NaN
            3	b		3		NaN
            4	c		4		NaN
    '''
    pd.merge(df1,df2,on = 'name',how = 'right')  # 右连接
    '''
            	name	data1	data2
            0	Carl	0.0		0
            1	Lucy	1.0		1
            2	x		NaN		2
            3	y		NaN		3
            4	z		NaN		4
    '''
    
    以索引作为连接键
    left = DataFrame({'data':range(5),'name':['Carl','Lucy','a','b','c']})
    right = DataFrame({'new_data':range(5),'new_name':['Carlnew','Lucynew','x','y','z']})
    '''
    left
            data	name
            0	0	Carl
            1	1	Lucy
            2	2	a
            3	3	b
            4	4	c
    right
            	new_data	new_name
            0	0			Carlnew
            1	1			Lucynew
            2	2			x
            3	3			y
            4	4			z
    '''
    left.join(right)
    '''
            	data	name	new_data	new_name
            0	0		Carl	0			Carlnew
            1	1		Lucy	1			Lucynew
            2	2		a		2			x
            3	3		b		3			y
            4	4		c		4			z
    '''
    
    

    2、pandas.concat() 方法

    轴向连接,即沿着一条轴将多个对象堆叠到一起

    '''
    a:
            a    0          
            b    1
            dtype: int64
    b:
            c    2
            d    3
            dtype: int64
    c:
            e    4
            f    5
            dtype: int64
    '''
    pd.concat([a,c,b],axis = 0) #默认是按列堆叠 
    '''
            a    0
            b    1
            e    4
            f    5
            c    2
            d    3
            dtype: int64
    '''
    pd.concat([a,c,b],axis = 1) #按行堆叠 
    '''
           		0	1	2
            a	0.0	NaN	NaN
            b	1.0	NaN	NaN
            e	NaN	4.0	NaN
            f	NaN	5.0	NaN
            c	NaN	NaN	2.0
            d	NaN	NaN	3.0
    '''
    

    3、combine_first() 方法

    作用 : 合并重叠数据

    可以理解为打补丁操作:s1中有空缺的地方,从s2中拿来数据补上

    from numpy import nan as Na
    
    s1 = Series([Na,2.0,Na,4.0,Na,6.0],index = list('abcdef'))
    s2 = Series([100.0,200.0,300.0,Na,Na,600.0],index = list('abcdef'))
    
    '''
    s1
            a    NaN
            b    2.0
            c    NaN
            d    4.0
            e    NaN
            f    6.0
            dtype: float64
    s2
            a    100.0
            b    200.0
            c    300.0
            d      NaN
            e      NaN
            f    600.0
            dtype: float64
    '''
    s1.combine_first(s2)
    '''
            a    100.0
            b      2.0
            c    300.0
            d      4.0
            e      NaN
            f      6.0
            dtype: float64
    '''
    
    

    二、数据重塑/轴向旋转

    1、数据重塑

    定义

    重塑指的是将数据重新排列,也叫轴向旋转

    DataFrame提供了两个方法

    • stack: 将数据的列 “旋转” 为行
    • unstack: 将数据的行“旋转”为列

    例如:

    data = DataFrame(np.arange(9).reshape(3,3),index = pd.Index(['English','Math','Histioy'],name = 'Course'),columns= pd.Index(['Carl','Lucy','Petter'],name = 'Name'))
    '''
            Name	Carl	Lucy	Petter
            Course			
            English	0		1		2
            Math	3		4		5
            Histioy	6		7		8
    '''
    data.stack()
    '''
            Course   Name  
            English  Carl      0
                     Lucy      1
                     Petter    2
            Math     Carl      3
                     Lucy      4
                     Petter    5
            Histioy  Carl      6
                     Lucy      7
                     Petter    8
            dtype: int32
    '''
    data.unstack()
    '''
            Name    Course 
            Carl    English    0
                    Math       3
                    Histioy    6
            Lucy    English    1
                    Math       4
                    Histioy    7
            Petter  English    2
                    Math       5
                    Histioy    8
            dtype: int32
    '''
    

    2、处理堆叠格式

    堆叠格式也叫长格式,一般关系型数据库存储时间序列的数据会采用此种格式

    虽然这种存储格式对于关系型数据库是好的,不仅保持了关系完整性还提供了方便的查询支持,但是对于数据操作可能就不那么方便了,DataFrame数据格式才更加方便。

    pivot() 方法

    df5 = DataFrame({'data':['1989-06-01','1989-04-25','1999-07-25'],'item':['Carl','Lucy','Peter'],'value':['60','41','44']})
    
    '''
            	data		item	value
            0	1989-06-01	Carl	60
            1	1989-04-25	Lucy	41
            2	1999-07-25	Peter	44
    '''
    # df5.pivot(index=None, columns=None, values=None)
    df5.pivot('data','item','value').fillna('空值')
    '''
            item		Carl	Lucy	Peter
           		  data			
            1989-04-25	空值	   41		空值
            1989-06-01	60		空值		空值
            1999-07-25	空值     空值		44
    '''
    
    
    
  • 相关阅读:
    ASP.NET 表单验证 Part.1(理解表单验证)
    Silverlight 简介 Part.3(设计 Siverlight 页面)
    ASP.NET 成员资格 Part.3(LoginStatus、LoginView、PasswordRecovery)
    ASP.NET 网站部署 Part.1(安装IIS、复制文件部署网站)
    ASP.NET Dynamic Data Part.1(创建动态数据应用程序)
    ASP.NET 安全模型 Part.2(SSL)
    ASP.NET MVC Part.2(扩展基本的 MVC 应用程序)
    ASP.NET 网站部署 Part.2(使用 Web 部署)
    开发高级 Web 部件
    创建 Web 部件(WebPart 类、简单的 Web 部件)
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/14975647.html
Copyright © 2011-2022 走看看