gpt4 book ai didi

python - 将 Pandas Dataframe 向量化为 Numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:38 24 4
gpt4 key购买 nike

我有一个问题,我需要将 pandas 数据框转换为列表列表的数组。

示例:

import pandas as pd
df = pd.DataFrame([[1,2,3],[2,2,4],[3,2,4]])

我知道有 as_matrix() 函数返回如下:

df.as_matrix():
# result:array([[1, 2, 3],
[2, 2, 4],
[3, 2, 4]])

但是,我需要这种格式的东西

  [array([[1], [2], [3]]),
array([[2], [2], [4]],
array([[3], [2], [4]])]

即。我需要一个包含列表列表的数组列表,其中最里面的列表包含一个元素,数组中最外面的列表代表数据帧的行。这样做的效果是,它基本上将数据帧的每一行向量化为 3 维向量。

当我需要在 numpy 中进行矩阵/向量运算并且当前我拥有的数据源是 .csv 格式并且我正在努力寻找一种将数据帧转换为向量的方法时,这尤其有用。

最佳答案

提取底层数组数据,沿最后一个添加新轴,然后使用 np.vsplit 沿第一个轴拆分 -

np.vsplit(df.values[...,None],df.shape[0])

sample 运行-

In [327]: df
Out[327]:
0 1 2
0 1 2 3
1 2 2 4
2 3 2 4

In [328]: expected_output = [np.array([[1], [2], [3]]),
...: np.array([[2], [2], [4]]),
...: np.array([[3], [2], [4]])]

In [329]: expected_output
Out[329]:
[array([[1],
[2],
[3]]), array([[2],
[2],
[4]]), array([[3],
[2],
[4]])]

In [330]: np.vsplit(df.values[...,None],df.shape[0])
Out[330]:
[array([[[1],
[2],
[3]]]), array([[[2],
[2],
[4]]]), array([[[3],
[2],
[4]]])]

如果您正在使用 NumPy 函数,那么在大多数情况下,您应该能够取消拆分并直接使用扩展数组版本。

现在,under the hoods np.vsplit使用 np.array_split 这基本上是一个循环。因此,更高效的方法是避免函数开销,就像这样 -

np.array_split(df.values[...,None],df.shape[0])

请注意,这将比预期输出中列出的维度多一维。如果你想要一个压缩版本,我们可以在新轴扩展数组版本上使用列表理解,就像这样 -

In [357]: [i for i in df.values[...,None]]
Out[357]:
[array([[1],
[2],
[3]]), array([[2],
[2],
[4]]), array([[3],
[2],
[4]])]

因此,另一种方法是在循环中添加新轴 -

[i[...,None] for i in df.values]

关于python - 将 Pandas Dataframe 向量化为 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44389616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com