Python从数组中删除括号[重复]

Posted

技术标签:

【中文标题】Python从数组中删除括号[重复]【英文标题】:Python Remove brackets from arrays [duplicate] 【发布时间】:2018-12-12 08:21:29 【问题描述】:

我有一个包含许多数组的列表。

coef

[array([[1.72158862]]),
 array([[3.28338167]]),
 array([[3.28004542]]),
 array([[6.04194548]])]

将其放入数据框给出:

azone = pd.DataFrame(
    'zone': zone,
     'coef': coef
    )

    zone    coef
0   1   [[1.7215886175218464]]
1   2   [[3.283381665861124]]

我想知道是否有办法删除括号。我尝试了 tolist() 但没有给我结果。

还有另一个列表:

value

[[array([8.46565297e-294, 1.63877641e-002]),
 array([1.46912451e-220, 2.44570170e-003]),
 array([3.80589351e-227, 4.41242801e-004])]

我只想保留第二个值。期望的输出是:

   value
0  1.63877641e-002
1  2.44570170e-003
2  4.41242801e-004

【问题讨论】:

方括号向我们展示了数组具有 (1,1) 形状。它们不仅仅是一个漂亮的打印设备。 【参考方案1】:

使用拉威尔:

coef = [np.array([[1.72158862]]),
        np.array([[3.28338167]]),
        np.array([[3.28004542]]),
        np.array([[6.04194548]])]

coef = np.array(coef).ravel()

print(coef)

array([1.72158862, 3.28338167, 3.28004542, 6.04194548])

此外,如果您不打算修改返回的一维数组,我建议您使用 numpy.ravel,因为它不会复制数组,而只是返回数组的视图,这比 numpy.flatten 快很多

【讨论】:

虽然我同意这是一个比我更好的解决方案并且可能应该被接受,但值得注意的是性能差异是微不足道的(复制数组很便宜)。您将把数组输入pd.DataFrame,这意味着您总是需要一份副本。对于 4mio 项目,我看到 2.88s 与 2.75s 的性能。【参考方案2】:

您可以使用 NumPy 的 flatten 方法从多维数组列表中提取一维数组。例如:

coef = [np.array([[1.72158862]]),
        np.array([[3.28338167]]),
        np.array([[3.28004542]]),
        np.array([[6.04194548]])]

coef = np.array(coef).flatten()

print(coef)

array([1.72158862, 3.28338167, 3.28004542, 6.04194548])

由于 NumPy 数组是 Pandas 数据帧的基础,您会发现您的 Pandas coef 系列现在将是 dtype float 并且仅包含标量。

【讨论】:

行得通!谢谢! @Celine 如果这回答了您的问题,请考虑支持并接受它。

以上是关于Python从数组中删除括号[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组元素中删除括号

从 numpy 数组中删除括号

我的 for 循环没有根据条件删除数组中的项目? Python [重复]

从元组列表中删除括号[重复]

如何从 JSON 数组数据输出中删除大括号 []?

如何从数组中删除开始/结束方括号