我想将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
答案 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