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
    '''
    
    
    
  • 相关阅读:
    linux追加中文字库,解决imagemagick 中文乱码的问题。
    laravel 学习
    postman post 数据格式
    PHP5各个版本的新功能和新特性总结
    laravel 自定义常量方法
    微信服务号获得openid 跟用户信息
    【转】solr deltaImportQuery deltaQuery parentDeltaQuery 用法规则
    Shell
    [spring] org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is d .
    [transaction] org.hibernate.HibernateException: createQuery is not valid without active transaction
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/14975647.html
Copyright © 2011-2022 走看看