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



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM