在网上看上很多关于numpy中stack的复杂解释,其实他的实际含义和用法很简单,被人理解复杂了,当然,我们先看pandas中的stack,unstack的用法:
1,在我们常见的数据层次化结构分为两种,一种是花括号(一维数据),一种是表格(二维度数据),这个参考了如下网址
https://www.cnblogs.com/bambipai/p/7658311.html
左边的是一维结构(类似于Series结构),右边的是二维结构(类似于Dataframe的结构),
在pandas中的stack函数是把二维结构堆叠成一维结构,
unstack是不要变成一维结构,也就是变成表格结构:
我们看下面代码:数据就是oracle中的emp表的数据:
import pandas as pd
df = pd.read_csv('emp.csv')
df2 = df.stack()
print(df2)
print(df2.unstack())
# dataframe.stack():把dataframe转化成series类型,就是把二维变成一维
# series.unstack():把series转化成dataframe类型 ,把以为转化成二维
对于stack和UNstack,还可以看下面的代码,这是一本书上的知识点:
'''
stack:将数据的列"旋转"成行 (dataframe->Series)
unstack:将数据的行“旋转”成列 (Series->dataframe)
'''
import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(6).reshape(2,3),index=pd.Index(['Ohio','Colordo'],name='state'),
columns=pd.Index(['one','two','three'],name='number'))
print(data)
result = data.stack()
print(type(result))
# In[]:
# 这个需要好好的理解一下,还是蛮重要的。
# unstack:把数据的行“旋转”成列,这样会更加容易理解
print(result.unstack(0))
print(result.unstack(1))
2,我们再来看numpy的stack函数:
我们先看下帮助文档:Join a sequence of arrays along a new axis.
我们把它翻译成“沿着新轴连接数组序列”,其实这句话就已经告诉我们答案,这个函数是怎么使用的了。
我们先看代码:
a = [1,2,3,4]
b =[5,6,7,8]
print(np.stack((a,b),axis=0))
'''
结果:
[[1 2 3 4]
[5 6 7 8]]
'''
print(np.stack((a,b),axis=1))
'''
结果:
[[1 5]
[2 6]
[3 7]
[4 8]]
'''
在这里axis=0 ,可以简单的理解为行方向,axis=1,理解为列(竖)方向(只针对二维数组来这样理解),当axis=0的时候,从行的方向进行连接组成一个新的数组,axis=1的时候,从列的方向进行新的连接组成新的数组。当然对于ndarray 就需要真正的理解axis=0,1,2,3…的含义了,在理解上2darray 和ndarray是相通的。
3,我们再看hstack,vstack;这两个函数好理解,看代码
import numpy as np
a = [1, 2, 3]
b = [4, 5, 6]
# 注意np.hstack((a,b))是两个括号,因为需要传递进来元祖
print(np.hstack((a, b)))
'''
[1 2 3 4 5 6]
'''
print(np.vstack((a,b)))
'''
[[1 2 3]
[4 5 6]]
'''
数据如下:
empno,ename,job,mgr,hiredate,sal,comm,deptno
7369,SMITH,CLERK,7902,1980/11/17,800,0,20
7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30
7521,WARD,SALESMAN,7698,1981/2/22,1250,500,30
7566,JONES,MANAGER,7839,1981/4/2,2975,0,20
7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981/5/1,2850,0,30
7782,CLARK,MANAGER,7839,1981/6/9,2450,0,10
7788,SCOTT,ANALYST,7566,1982/11/9,3000,0,20
7839,KING,PRESIDENT,7322,1981/12/17,5000,0,10
7844,TURNER,SALESMAN,7698,1981/12/8,1500,0,30
7876,ADAMS,CLERK,7788,1983/1/12,1100,0,20
7900,JAMES,CLERK,7698,1981/3/3,950,0,30
7902,FORD,ANALYST,7566,1981/6/3,3000,0,20
7934,MILLER,CLERK,7782,1982/1/23,1300,0,10