1. 程式人生 > >pandas中的stack,unstack和numpy,stack,hstack,vstack通俗理解

pandas中的stack,unstack和numpy,stack,hstack,vstack通俗理解

在網上看上很多關於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型別 ,把以為轉化成二維

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