最近参加数据挖掘比赛经常使用Pandas,由于涉及到三维的数据,使用了Panel作为存储结构。但是出现了伪增加的情况,花了很久解决了。
- Panel相当于一个存储Dataframe的字典
- Series一维、Dataframe二维、Panel三维
问题描述
data = {
'Item1' : pd.DataFrame(np.random.randn(, )),
'Item2' : pd.DataFrame(np.random.randn(, ))
}
p = pd.Panel(data)
p
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9MmeOVTQ610dBRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN1ETNzgTN2EjMxQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
取出每一层( axis=0)后相当于一个Dataframe,使用Dataframe常用的添加列的方式逐层添加后,虽然逐层访问看起来变了,但是Panel整体并没有改变。
p['Item1']['add'] = pd.DataFrame(np.random.randn(,))
p['Item2']['add'] = pd.DataFrame(np.random.randn(,))
p['Item1']
p
解决方法
axis=0的添加
p['Item3'] = pd.DataFrame(np.random.randn(p.major_axis.shape[], p.minor_axis.shape[]),
index=p.major_axis, columns=p.minor_axis)
axis=1或2的添加
p.ix[:,:,'add'] = pd.DataFrame(np.random.randn(p.major_axis.shape[], p.items.shape[]),index=p.major_axis, columns=p.items)
p.to_frame()