在数据处理与数据分析的过程中,我们经常会遇到一种处理场景就是行列转换。目前,市场上的软件比如SPSS,有相应的菜单进行操作。但是,SPSS有其自身的局限性,比如数据量大情况的性能劣势。
Python作为一门开源的编程语言,在这方面就远胜于SPSS。或许这样的比较不是很恰当,我们就当是用来理解差异性的一种方式。
接下来,小编会带领大家,基于python的使用numpy的一些方法,轻松进行数据处理与分析过程中经常遇到的行列转换问题。
有许多用于重新排列表格型数据的基础运算。这些函数也称作重塑(reshape)或轴向旋转(pivot)运算。
塑层次化索引
层次化索引为DataFrame数据的重排任务提供了一种具有良好一致性的方式。主要功能有二:
stack:将数据的列“旋转”为行。
unstack:将数据的行“旋转”为列。
In [9]: import numpy as npIn [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]: dataOut[11]: number one two threestate Ohio 0 1 2Colorado 3 4 5
使用stack()方法进行列转行
使用该数据的stack方法即可将列转换为行,得到一个Series:
In [12]: result=data.stack()In [13]: resultOut[13]: state numberOhio one 0 two 1 three 2Colorado one 3 two 4 three 5dtype: int64
使用unstack()方法进行行转列
对于一个层次化索引的Series,可以用unstack将其重排为一个DataFrame:
In [14]: result.unstack()Out[14]: number one two threestate Ohio 0 1 2Colorado 3 4 5
默认情况下,unstack操作的是最内层(stack也是如此)。传入分层级别的编号或名称即可对其他级别进行unstack操作:
In [15]: result.unstack(0)Out[15]: state Ohio Coloradonumber one 0 3two 1 4three 2 5
In [16]: result.unstack('state')Out[16]: state Ohio Coloradonumber one 0 3two 1 4three 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]: data2Out[20]: one a 0 b 1 c 2 d 3two c 4 d 5 e 6dtype: int64In [21]: data2.unstack()Out[21]: a b c d eone 0.0 1.0 2.0 3.0 NaNtwo 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.0two c 4.0 d 5.0 e 6.0dtype: float64In [23]: data2.unstack().stack(dropna=False)Out[23]: one a 0.0 b 1.0 c 2.0 d 3.0 e NaNtwo a NaN b NaN c 4.0 d 5.0 e 6.0dtype: float64
关于类似数据行列转换的python数据处理方法,还有很多,比如数据集合并、重复列的处理等等。大家可以直接在今日头条APP上直接搜多即可: