如何将Pandas数据帧列表转换成3D Numpy数组?

5
如果我有一个类似以下的pd.DataFrame列表:
df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df_list = [df, df]

问题: 如何将其转换为一个形状为(2, 3, 5)的3D np.array

我尝试使用np.array(df_lsit),但出现以下错误:

ValueError: cannot copy sequence with size 4 to array axis with dimension 5

8
np.stack(df_list) 的翻译是 "将 df_list 中的数组沿新轴堆叠起来"。 - Divakar
天才!你太厉害了... :) 谢谢!这个完美地运行。 - Newskooler
1
@Divakar 把那个评论作为答案添加并帮助 OP 关闭这个问题? :) - Thennan
2个回答

2

使用 map()df.to_numpy():

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df_list = [df, df]

np_array = np.array(list(map(lambda x: x.to_numpy(), df_list)))

# to make sure the shape of np_array is correct
np_array = np_array.reshape((x, y, z))

在第Z维中的列顺序将与pandas DataFrame中的列顺序相同。因此,如果您希望按照特定顺序排列列,则需要在运行df.to_numpy()之前重新排序列。
当然,您可以在NumPy表单中重新排序列,但在pandas DataFrame中重新排序它们将更容易调试。

1
你应该将DataFrame转换为numpy数组,然后再将其转换为3D数组。 像这样:
np.array([np.array(df), np.array(df)])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接