将数组列表转换为熊猫数据框

新手上路,请多包涵

我有一个要转换为 DataFrame 的 numpy 数组列表。每个数组应该是数据帧的一行。

使用 pd.DataFrame() 不起作用。它总是给出错误:ValueError:必须通过二维输入。

有一个更好的方法吗?

这是我当前的代码:

 list_arrays = [ array([[0, 0, 0, 1, 0, 0, 0, 0, 00]], dtype='uint8'),
                array([[0, 0, 3, 2, 0, 0, 0, 0, 00]], dtype='uint8')
              ]

d = pd.DataFrame(list_arrays)

ValueError: Must pass 2-d input

原文由 Marcos Santana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

选项1:

 In [143]: pd.DataFrame(np.concatenate(list_arrays))
Out[143]:
   0  1  2  3  4  5  6  7  8
0  0  0  0  1  0  0  0  0  0
1  0  0  3  2  0  0  0  0  0

选项 2:

 In [144]: pd.DataFrame(list(map(np.ravel, list_arrays)))
Out[144]:
   0  1  2  3  4  5  6  7  8
0  0  0  0  1  0  0  0  0  0
1  0  0  3  2  0  0  0  0  0


为什么我得到:

ValueError: Must pass 2-d input

我认为 pd.DataFrame() 尝试将其转换为 NDArray,如下所示:

 In [148]: np.array(list_arrays)
Out[148]:
array([[[0, 0, 0, 1, 0, 0, 0, 0, 0]],

       [[0, 0, 3, 2, 0, 0, 0, 0, 0]]], dtype=uint8)

In [149]: np.array(list_arrays).shape
Out[149]: (2, 1, 9)     # <----- NOTE: 3D array

原文由 MaxU - stop genocide of UA 发布,翻译遵循 CC BY-SA 3.0 许可协议

备选方案 1

 pd.DataFrame(sum(map(list, list_arrays), []))

   0  1  2  3  4  5  6  7  8
0  0  0  0  1  0  0  0  0  0
1  0  0  3  2  0  0  0  0  0

备选方案 2

 pd.DataFrame(np.row_stack(list_arrays))

   0  1  2  3  4  5  6  7  8
0  0  0  0  1  0  0  0  0  0
1  0  0  3  2  0  0  0  0  0

原文由 piRSquared 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题