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可以通过两行代码,轻松搞定行列转换问题。依照上述内容,亲手实践一下吧,如有问题,欢迎留言与关注。感谢支持!
「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」