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
'''


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