将 3D 数组转换为 pandas 面板数据
Convert 3D array to pandas Panel data
我想在 Pandas 中将 3D 数组转换为面板数据,但它给我的错误是 "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)
输出为:
Traceback (most recent call last):
File "C:/<Project_path>/Test", line 16, in <module>
pnl=pd.Panel(data=diff)
TypeError: object() takes no parameters
如评论中所建议,您should/could使用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
我想在 Pandas 中将 3D 数组转换为面板数据,但它给我的错误是 "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)
输出为:
Traceback (most recent call last):
File "C:/<Project_path>/Test", line 16, in <module>
pnl=pd.Panel(data=diff)
TypeError: object() takes no parameters
如评论中所建议,您should/could使用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