vstack、hstack和dstack都用于把几个小数组合并成一个大数组。它们的差别是小数组的元素在大数组中的排列顺序有所不同
一、vstack
vstack实现了轴0合并。vstack的字母v表示vertical的意思,相当是追加的意思
numpy.vstack(tup)
tup:两个数组,除第一轴外,所有阵列的形状都必须相同。一维数组必须具有相同的长度
shape(N,)的1维数组已重塑为(1,N)后沿第一轴进行连接
#这个是(2,),会变成(1,2),因此下面这两种结果是一样的 import numpy as np a = [1,2] b = [3,4] c = np.vstack((a,b)) print(c) #这个是(1,2) a = [[1,2]] b = [[3,4]] c = np.vstack((a,b)) print(c) ''' [[1 2] [3 4]] [[1 2] [3 4]] '''
总结:有两列数据,然后再转置
pd.DataFrame(c)
二、hstack
hstack表示轴1合并
a = [[1,2], [3,4]] b = [[5], [6]] print(np.hstack([a,b])) # [[1 2 5] # [3 4 6]]
相当右边追加
三、dstack
看看之前使用到的
newvalues=np.dstack((np.repeat(t.reportno.values,list(map(len,t.data_list.values))),np.concatenate(t.data_list.values))) pd.DataFrame(data=newvalues[0],columns=['reportno','data_list'])
沿深度方向(沿第三轴)按顺序堆叠数组
numpy.dstack(tup)
参数:
tup:sequence of arrays,两个数组,除第三个轴外,所有阵列的形状都必须相同。一维或二维阵列必须具有相同的形状。
值得注意的是:
shape(M,N)的2维数组已重塑为(M,N,1),shape(N,)的1维数组 已重塑为(1, N,1),再按照第三维相加
现在,a、b在2号轴上被连接起来。如果a、b是一维数组,或是二维数组,系统首先将a、b变为三维数组,再按照2号轴进行合并操作,把a追加到c中,再把b的元素排到c中。在结果中,来自于b的元素的2号轴的下标将变大,因此排到a的后面,但各元素其它轴的坐标不变。
a = np.array((1,2,3)) b = np.array((2,3,4)) np.dstack((a,b)) '''
np.dstack((a,b))[0] 和上面的结果也是一样的
array([[[1, 2], [2, 3], [3, 4]]]) ''' np.dstack((a,b)).shape #(1, 3, 2) 沿第三轴相加,因此是1,3,2 a.shape #(3,) b.shape #(3,)
再看二维的
a = np.array([[1,2], [3,4]]) b = np.array([[5,6], [7,8]]) c = np.dstack([a,b]) print(c) ''' [[[1 5] [2 6]] [[3 7] [4 8]]] ''' print(c[:,:,0]) ''' [[1 2] [3 4]] ''' print(c[:,:,1]) ''' [[5 6] [7 8]] ''' print(c[0]) print(c[1]) ''' [[1 5] [2 6]] [[3 7] [4 8]] '''
看来这么多内在的东西,我们总结一下:
参数是一维时,其实就是就是两列数据,我们需要弄成df中的两列,二维时不清楚,反正就是对位merge