Python 我怎样才能转换;[nan,1,2,3]”;要列出的字符串[nan,1,2,3]?
如何将Python 我怎样才能转换;[nan,1,2,3]”;要列出的字符串[nan,1,2,3]?,python,string,list,Python,String,List,如何将“[nan,1,2,3]”字符串转换为列表[nan,1,2,3] 如果我使用 from ast import literal_eval literal_eval("[1,2,3]") 我明白了 但是,如果我尝试转换包含nan的字符串,则会出现以下错误: File "<unknown>", line 1 [nan 1 2 3 ^ SyntaxError: invalid syntax Pro
“[nan,1,2,3]”
字符串转换为列表[nan,1,2,3]
如果我使用
from ast import literal_eval
literal_eval("[1,2,3]")
我明白了
但是,如果我尝试转换包含nan
的字符串,则会出现以下错误:
File "<unknown>", line 1
[nan 1 2 3
^
SyntaxError: invalid syntax
Process finished with exit code 1
文件“”,第1行
[nan 1 2 3
^
SyntaxError:无效语法
进程已完成,退出代码为1
使用numpy.fromstring
:
>>> s = '[nan, 1, 2, 3]'
>>> import numpy as np
>>> a = np.fromstring(s[1:-1], sep=', ')
>>> a
array([ nan, 1., 2., 3.])
>>>
您可以将
NaN
替换为有效python的None
,然后使用literal\u eval
:
s = "[nan,1,2,3]"
literal_eval(s.replace('nan', 'None'))
# [None, 1, 2, 3]
尝试使用
np.fromstring
Ex:
import numpy as np
lst = '[nan 1 2 3]'
print(np.fromstring(lst.strip("[]"), sep=' '))
#-->[nan 1. 2. 3.]
如果您愿意使用numpy,可以使用浮点的隐式类型转换(注意,对于整数,没有nan)
输入<代码>[nan 1 2 3中甚至没有逗号,您不能将
文字评估
与它一起使用。eval
可以this@DustyPosa埃瓦尔做到了,但非常糟糕practice@DustyPosa我认为通常应该避免使用eval
,因为您可以向其中注入任何代码。如果只是为了您,您可能会侥幸逃脱,但通常情况下e通常是更好、更健壮的解决方案。这是一个真正的NaN还是字符串“NaN”?我假设OP想要np.NaN
@BramVanroy real Nant这是fromstring
方法的优点,它创建了一个numpy数组,其中所有值都具有相同的数据类型。因此,即使您愿意,也不能将浮点数与字符串混合使用y都是浮点数,即使nan也是。@Magellan88是一个非常优雅的解决方案。我想说这是最具python风格的解决方案,尤其是对任何人来说都非常明确的.strip(“[]”
)。
import numpy as np
lst = '[nan 1 2 3]'
print(np.fromstring(lst.strip("[]"), sep=' '))
#-->[nan 1. 2. 3.]
import numpy as np
a = "[nan 1 2 3]"
np.array(a[1:-1].split(), dtype="f")
#array([nan, 1., 2., 3.], dtype=float32)