Python - 列表中的字符串到 numpy 数组

问题描述

我有以下字符串列表“list1”:

list1= ['mz','-3956901.50','-1310316.62','-505251.812','-6262072.50','-0.781772032E+10-0.113921731E+11']

我想将第 2 列到最后一列转换为一个 numpy 数组:

np.asarray(list[1:],dtype='float')

问题是由于列表中的最后一项,我收到了 ValueError。 如何首先将最后一项拆分为两个字符串(由于分隔符中缺少空格)?

解决方法

您可以执行以下操作:

  1. 用分隔符“-”分割列表中的最后一个值
  2. 在非空字符串的情况下添加分隔符(拆分也会返回空字符串)
  3. 删除列表中的最后一个值并添加拆分字符串
list1= ['mz','-3956901.50','-1310316.62','-505251.812','-6262072.50','-0.781772032E+10-0.113921731E+11']

delimeter = "-"
splited_string_with_delemeter =  [delimeter+splited_string for splited_string in list1[-1].split(delimeter) if splited_string]

list2 = list1[:-1] + splited_string_with_delemeter

然后你就可以创建 NumPy 数组了:

np.asarray(list2[1:],dtype='float')

结果是:

array([-3.95690150e+06,-1.31031662e+06,-5.05251812e+05,-6.26207250e+06,-7.81772032e+09,-1.13921731e+10])
,

代码:

import numpy as np
list1= ['mz','-0.781772032E+10-0.113921731E+11']
print(np.asarray([eval(x) for x in list1[1:]],dtype='float'))

结果:

[-3.95690150e+06 -1.31031662e+06 -5.05251812e+05 -6.26207250e+06
 -1.92098934e+10]
,

对于 list1 的最后一项,您可以使用 eval() 函数将其转换为数字,然后您的代码将起作用:

list2 = np.asarray([eval(x) for x in list1[1:]],-1.92098934e+10])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...