在数据处理与数据分析的过程中,我们经常会遇到一种处理场景就是行列转换。目前,市场上的软件比如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上直接搜多即可: