python行列互換的方法(如何將python列資料變成行)
一起學習,一起成長!
在資料處理與資料分析的過程中,我們經常會遇到一種處理場景就是行列轉換。目前,市場上的軟體比如SPSS,有相應的選單進行操作。但是,SPSS有其自身的侷限性,比如資料量大情況的效能劣勢。
Python作為一門開源的程式語言,在這方面就遠勝於SPSS。或許這樣的比較不是很恰當,我們就當是用來理解差異性的一種方式。
接下來,小編會帶領大家,基於python的使用numpy的一些方法,輕鬆進行資料處理與分析過程中經常遇到的行列轉換問題。
有許多用於重新排列表格型資料的基礎運算。這些函式也稱作重塑(reshape)或軸向旋轉(pivot)運算。
塑層次化索引
層次化索引為DataFrame資料的重排任務提供了一種具有良好一致性的方式。主要功能有二:
stack:將資料的列“旋轉”為行。
unstack:將資料的行“旋轉”為列。
In [9]: import numpy as np In [10]: data=DataFrame(np.arange(6).reshape((2,3)), index=pd.Index(['Ohio','Colorado'],name='state'), columns=pd.Index(['one','two','three'],name='number')) In [11]: data Out[11]: number one two three state Ohio 0 1 2 Colorado 3 4 5
使用stack()方法進行列轉行
使用該資料的stack方法即可將列轉換為行,得到一個Series:
In [12]: result=data.stack() In [13]: result Out[13]: state number Ohio one 0 two 1 three 2 Colorado one 3 two 4 three 5 dtype: int64
使用unstack()方法進行行轉列
對於一個層次化索引的Series,可以用unstack將其重排為一個DataFrame:
In [14]: result.unstack() Out[14]: number one two three state Ohio 0 1 2 Colorado 3 4 5
預設情況下,unstack操作的是最內層(stack也是如此)。傳入分層級別的編號或名稱即可對其他級別進行unstack操作:
In [15]: result.unstack(0) Out[15]: state Ohio Colorado number one 0 3 two 1 4 three 2 5
In [16]: result.unstack('state') Out[16]: state Ohio Colorado number one 0 3 two 1 4 three 2 5
unstack操作引入缺失資料
如果不是所有的級別值都能在各分組中找到的話,則unstack操作可能會引入缺失資料:
In [17]: s1=Series([0,1,2,3],index=['a','b','c','d']) In [18]: s2=Series([4,5,6],index=['c','d','e']) In [19]: data2=pd.concat([s1,s2],keys=['one','two']) In [20]: data2 Out[20]: one a 0 b 1 c 2 d 3 two c 4 d 5 e 6 dtype: int64 In [21]: data2.unstack() Out[21]: a b c d e one 0.0 1.0 2.0 3.0 NaN two NaN NaN 4.0 5.0 6.0
stack預設濾除缺失資料
Stack預設會濾除缺失資料,因此該運算是可逆的:
In [22]: data2.unstack().stack() Out[22]: one a 0.0 b 1.0 c 2.0 d 3.0 two c 4.0 d 5.0 e 6.0 dtype: float64 In [23]: data2.unstack().stack(dropna=False) Out[23]: one a 0.0 b 1.0 c 2.0 d 3.0 e NaN two a NaN b NaN c 4.0 d 5.0 e 6.0 dtype: float64
關於類似資料行列轉換的python資料處理方法,還有很多,比如資料集合並、重複列的處理等等。大家可以直接在今日頭條APP上直接搜多即可:
總的來說,通過python可以通過兩行程式碼,輕鬆搞定行列轉換問題。依照上述內容,親手實踐一下吧,如有問題,歡迎留言與關注。感謝支援!
「親,如果筆記對您有幫助,收藏的同時,記得給點個贊、加個關注哦!感謝!」
「文中程式碼均親測過,若有錯誤之處,歡迎批評指正,一起學習,一起成長!」