【问题标题】:All string list to a numpy float array所有字符串列表到一个 numpy 浮点数组
【发布时间】:2019-02-28 12:56:14
【问题描述】:

我正在从 pandas 读取一个 csv 文件,其中有一列 (3,3) 形状的列表。 示例列表如下。

[[45.70345721, -0.00014686, -1.679e-05], [-0.00012219, 45.70271889, 0.00012527], [-1.161e-05, 0.00013083, 45.70306778]]

我尝试使用np.array(arr).astype(np.float) 将此列表转换为 numpy 浮点数组。但它给出了以下错误。

ValueError:无法将字符串转换为浮点数:

当我搜索根本原因时,我发现这个列表是完全字符串格式的。 print [i for i in arr] 给出以下所有内容都是字符串。

['[', '[', '4', '5', '.', '7', '0', '3', '4', '5', '7', '2', '1', ',', ' ', '-', '0', '.', '0', '0', '0', '1', '4', '6', '8', '6', ',', ' ', '-', '1', '.', '6', '7', '9', 'e', '-', '0', '5', ']', ',', ' ', '[', '-', '0', '.', '0', '0', '0', '1', '2', '2', '1', '9', ',', ' ', '4', '5', '.', '7', '0', '2', '7', '1', '8', '8', '9', ',', ' ', '0', '.', '0', '0', '0', '1', '2', '5', '2', '7', ']', ',', ' ', '[', '-', '1', '.', '1', '6', '1', 'e', '-', '0', '5', ',', ' ', '0', '.', '0', '0', '0', '1', '3', '0', '8', '3', ',', ' ', '4', '5', '.', '7', '0', '3', '0', '6', '7', '7', '8', ']', ']']

如何将此列表转换为 numpy 浮点数组?

编辑

这是我的数据框一部分的快照。

加载时,数据框采用以下格式。 df 这是一个小的示例数据框。

df = pd.DataFrame(columns=["e_total"], data=[[['[', '[', '4', '5', '.', '7', '0', '3', '4', '5', '7', '2', '1', ',', ' ', '-', '0', '.', '0', '0', '0', '1', '4', '6', '8', '6', ',', ' ', '-', '1', '.', '6', '7', '9', 'e', '-', '0', '5', ']', ',', ' ', '[', '-', '0', '.', '0', '0', '0', '1', '2', '2', '1', '9', ',', ' ', '4', '5', '.', '7', '0', '2', '7', '1', '8', '8', '9', ',', ' ', '0', '.', '0', '0', '0', '1', '2', '5', '2', '7', ']', ',', ' ', '[', '-', '1', '.', '1', '6', '1', 'e', '-', '0', '5', ',', ' ', '0', '.', '0', '0', '0', '1', '3', '0', '8', '3', ',', ' ', '4', '5', '.', '7', '0', '3', '0', '6', '7', '7', '8', ']', ']']]])

有人可以试一试并帮我将其转换为浮点数组。

【问题讨论】:

  • 该列表实际上是否命名为list?这是一个很大的禁忌
  • @CharlesLandau 不,type(arr) 产生 <type 'str'>
  • 拥有变量list 是不允许的部分。 list 已经是一个 Python 对象
  • 根据您所放置的内容,您实际上有一个 python 列表的字符串表示形式。所以你真正拥有的是 "[[45.70345721, -0.00014686, -1.679e-05], [-0.00012219, 45.70271889, 0.00012527], [-1.161e-05, 0.00013083, 45.70306778]]" 注意引号。
  • @bravosierra99 的评论很可能是真的。

标签: python arrays numpy


【解决方案1】:

您可能可以使用 eval() 将整个字符串转换为实际列表。 eval() 通常不好用,但在这种情况下,它可能是你最好的选择。

您列为“示例”的内容不正确。您正在列出打印语句和列表理解的结果。作为该列的条目存储的是一个字符串。

你应该能够简单地取出每个项目并将其包装在 eval 中

eval(arr) 

这应该会返回一个形状 (3,3) python 列表。从那里您可以根据需要将其转换为 numpy 数组并更改类型。

【讨论】:

  • 哦,是的,这行得通,谢谢!是的,我无法在 python 中生成确切的原始字符串,宁愿从文件中加载它。
  • @avin 确定。所以为了清楚起见,使用 eval 是非常不鼓励的。我相信你可以用谷歌搜索很多原因。如果你能提供帮助,我不会把它放在任何生产代码中或依赖它。感谢您接受并支持我的解决方案。很多人不花时间!
【解决方案2】:

列表中的数字不是已经浮动了吗?如果是这种情况,只需将列表设为 np.array 即可满足您的要求。你只需要这样做

np.array(列表)

如果数字实际上是您在第二部分中显示的字符串,您将必须遍历列表并使用嵌套循环或嵌套列表理解单独转换每个数字。

循环看起来像这样

对于列表中的 i:

for j in i:

    j= np.float(j)

列表理解看起来像

new_list= [[np.float(j) for j in i] for i in list]

【讨论】:

  • 我们可能在您输入答案时正在交谈,但您应该阅读上面的 cmets。
  • @D.sanders 不幸的是,由于列表的格式,这不起作用。我已经更新了问题。
猜你喜欢
  • 2017-04-29
  • 2019-10-31
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多