Pandas中数据合并、DataFrame转置、数据重塑超详细介绍!(附实例)

阅读提示

本文将提到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
'''


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章