I want to convert 3D array to Panel data in Pandas, but It is giving me error as "TypeError: object() takes no parameters"
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)
Output is:
Traceback (most recent call last):
File "C:/<Project_path>/Test", line 16, in <module>
pnl=pd.Panel(data=diff)
TypeError: object() takes no parameters
As suggested in the comments, you should/could use MultiIndex
to store your 3D data:
pd.DataFrame(diff.reshape(-1,df1.shape[1]),
columns=df1.columns,
index=pd.MultiIndex.from_product((df1.index, df1.index))
)
Output:
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