Python 将所有字符串列表添加到numpy浮点数组

Python 将所有字符串列表添加到numpy浮点数组,python,arrays,numpy,Python,Arrays,Numpy,我正在从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:无法将字符串转换为浮点

我正在从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', ']', ']']]])

有人可以试试,帮我把它转换成浮点数组。

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

np.数组(列表)

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

这个循环看起来像这样

对于列表中的i:

for j in i:

    j= np.float(j)
列表如下所示

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

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

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

你应该能够简单地把每一件物品用eval包装起来

eval(arr) 

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

列表是否实际命名为
list
?这是一个很大的拒绝-no@CharlesLandau否,
类型(arr)
产生
具有变量
列表的部分是不允许的
list
已经是一个Python对象了,基于您所放置的内容,实际上您有一个Python列表的字符串表示形式。所以你真正拥有的是“[[45.70345721,-0.00014686,-1.679e-05],-0.00012219,45.70271889,0.00012527],-1.161e-05,0.00013083,45.70306778]。@bravosierra99 comment的评论可能是真的。我们可能是在你键入答案时谈话的,但是您应该阅读上面的评论。@D.sanders不幸的是,由于列表的格式,这不起作用。我已经更新了问题。哦,是的,这很有效,谢谢!是的,我无法用python生成准确的原始字符串,人们宁愿从文件中加载它。@avin当然可以。因此,明确地说,使用eval是非常不受鼓励的。我相信你可以用谷歌搜索很多原因。我不会把它放在任何生产代码中,也不会依赖它,如果你能帮助的话。感谢您接受并投票支持我的解决方案。很多人不花时间!