引入
在处理数据文件的时候,我们往往需要通过自己再处理来获得方便分析的数据表。这时候会经常用得到的操作就包括了重塑和透视。本期将对这个两个操作进行讲解,希望大家都能作出令自己满意的分析结果~
1.基础重塑
多层索引在DataFrame中提供了一种一致性的方式用于重排列数据。以下是两个基础操作:
1.1 stack(堆叠)
该操作会“旋转”或者将列中的数据透视到行。
1.2 unstack(拆堆)
该操作会将行中的数据透视到列。
下面来实际操作一下。我们选用jupyter notebook开发环境为例。
如上图,我们通过以下代码将所需要的包导入python环境
import numpy as np import pandas as pd 复制代码
接下来创建一个dataframe对象来处理数据——
df=pd.DataFrame({"a":["i","j","k","i","j","k"],"b":[2,1,4,1,2,4],"c":[3,2,2,1,2,3]}) df#用于在jupyter 环境中展示代码 复制代码
对df进行stack操作,进行堆叠——转置列的数据到行:
成功转置了数据,但我们不难发现,这不再是一个dataframe了
我们得到的新对象是一个series。
同理,unstack就是stack的逆向。如上图,进行stack再进行unstack就会回到df。
tip:unstack是对series作用的。stack是对dataframe进行的。
2.重塑中的缺失值
如果层级中的所有值并未包含于每个子分组时,拆分可能会带来缺失值。
如图,我们创建一个子分组不对等的series:
s1=pd.Series([0,1,2,3],index=["a","b","c","d"]) s2=pd.Series([4,5,6],index=["c","d","e"]) df2=pd.concat([s1,s2],keys=["one","two"])
可以从图中看出,one 和 two的子分组中不对等。一个包含abcd,一个包含cde
运行unstack将其拆为dataframe,生成的是带有缺失值的数据:
df2.unstack()
但是需要注意的是,stack会过滤出缺失值,因此stack和unstack在有缺失值的情况下仍然符合可逆的特性
非常人性化是吗