所有字符串列表到一个numpy浮点数组

时间:2019-02-28 12:56:15

标签: python arrays numpy

我正在从熊猫中读取一个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浮点数组?

编辑

这是我数据框的一部分。  enter image description here

加载后,数据帧采用以下格式。 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', ']', ']']]])

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

2 个答案:

答案 0 :(得分:1)

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

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

您应该能够简单地将每件物品包装起来并放在eval中

eval(arr) 

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

答案 1 :(得分:0)

列表中的数字是否已经浮动?如果是这种情况,只需将列表设为np.array就可以了。您只需要做

np.array(列表)

如果数字实际上是字符串,就像您在第二部分中显示的那样,则您将必须遍历列表并使用嵌套循环或嵌套列表推导分别转换每个数字。

循环看起来像这样

对于列表中的我:

for j in i:

    j= np.float(j)

列表理解如下

new_list = [[i中j的np.float(j)]列表中i的