将3D数组转换为熊猫面板数据

时间:2019-09-27 18:37:05

标签: python pandas numpy dataframe panel

我想将3D数组转换为Pandas中的Panel数据,但由于“ TypeError:object()不带参数”而给我错误

d = {'A': ['i1', 'i2', 'i3', 'i4', 'i5', 'i5', 'i1', 'i1', 'i5', 'i4'], 'B': ['c7', 'c6', 'c3', 'c1', 'c4', 'c7', 'c1', 'c4', 'c1', 'c4'], 'C': [8.123, 11, 2, 5, 3, -1, 0.5123, -0.1123, 0.3, 2]}
df = pd.DataFrame(data=d)
df1 = df.pivot_table(index='A', columns='B', values='C')
arr = df1.to_numpy()
diff = abs(arr[:, None] - arr)
pnl=pd.Panel(data=diff)
print(pnl)

输出为:

Traceback (most recent call last):
File "C:/<Project_path>/Test", line 16, in <module>
   pnl=pd.Panel(data=diff)
TypeError: object() takes no parameters

1 个答案:

答案 0 :(得分:1)

如评论中所建议,您应该/可以使用MultiIndex存储3D数据:

pd.DataFrame(diff.reshape(-1,df1.shape[1]), 
             columns=df1.columns,
             index=pd.MultiIndex.from_product((df1.index, df1.index))
            )

输出:

B          c1   c3      c4   c6     c7
i1 i1  0.0000  NaN  0.0000  NaN  0.000
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4  4.4877  NaN  2.1123  NaN    NaN
   i5  0.2123  NaN  3.1123  NaN  9.123
i2 i1     NaN  NaN     NaN  NaN    NaN
   i2     NaN  NaN     NaN  0.0    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4     NaN  NaN     NaN  NaN    NaN
   i5     NaN  NaN     NaN  NaN    NaN
i3 i1     NaN  NaN     NaN  NaN    NaN
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  0.0     NaN  NaN    NaN
   i4     NaN  NaN     NaN  NaN    NaN
   i5     NaN  NaN     NaN  NaN    NaN
i4 i1  4.4877  NaN  2.1123  NaN    NaN
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4  0.0000  NaN  0.0000  NaN    NaN
   i5  4.7000  NaN  1.0000  NaN    NaN
i5 i1  0.2123  NaN  3.1123  NaN  9.123
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4  4.7000  NaN  1.0000  NaN    NaN
   i5  0.0000  NaN  0.0000  NaN  0.000