【发布时间】:2021-02-05 00:53:07
【问题描述】:
我有一个类似的数据框
xs = pd.DataFrame({
'batch1': {
'timestep1': [1, 2, 3],
'timestep2': [3, 2, 1]
}
}).T
我想将它转换成一个 numpy 形状的数组(批处理、时间步长、特征)。对于xs,应该是 (1,2,3)。
问题是熊猫只知道二维形状,所以to_numpy 产生一个二维形状。
xs.to_numpy().shape # (1, 2)
同样,这会阻止使用 np.reshape,因为 numpy 似乎不会将最内层维度视为数组
xs.to_numpy().reshape((1,2,3)) # ValueError: cannot reshape array of size 2 into shape (1,2,3)
[编辑] 添加有关数据框如何到达此状态的上下文。
dataframe 最初开始于
xs = pd.DataFrame({
('batch1','timestep1'): {
'feature1': 1,
'feature2': 2,
'feature3': 3
},
('batch1', 'timestep2'): {
'feature1': 3,
'feature2': 2,
'feature3': 1
}
}
).T
我使用它分解成嵌套列表/数组
xs.apply(pd.DataFrame.to_numpy, axis=1).unstack()
【问题讨论】:
-
你看过 to_numpy 产生了什么吗? (不仅仅是它的形状)
-
是的。它通常会产生正确的形状,即
xs.to_numpy().shape # (1, 2),如果您检查最里面的尺寸,您可以看到正确的长度:xs.to_numpy()[0][0].shape # (3,)。因此,我认为,我一直在努力将最内在的形状提升一个层次。