2015-11-14 2 views
0

Привет У меня есть list вроде этого:Как извлечь значения int из строки?

B= 
["('33', '207')", 
"('33', '408')", 
"('33', '408')", 
"('33', '408')", 
"'NaN'", 
"('33', '207')"] 

Я хотел бы вернуть массив целых чисел, как следующий:

B1 = 
    [33, 207, 
    33, 408, 
    33, 408, 
    33, 408, 
    NaN, Nan, 
    33, 408] 

Я пытаюсь использовать regex в B1[0]=re.findall(r'\d+', B[0])

+0

NaNs является частью стандарта IEEE 754 для чисел с плавающей запятой. Таким образом, вы не можете создать «массив целых чисел» с значением NaN внутри него (ну, в python вы можете, но тогда это будет не только массив целочисленных чисел) –

ответ

0

Просто используйте сплит:

B1 = [(float(a[1]),float(a[-2])) for a in (b.split("'") for b in B)] 
0

Спасибо, Дэниэл. Тем не менее, я также могу иметь:

B= ["('31', '265')", 
"('31', '265')", 
"('31', '265')", 
"('31', '265')", 
"('31', '265')", 
nan, 
nan, 
nan, 
nan, 
nan] 
0

Вы можете использовать ast.literal_eval для преобразования строки в кортеж строк цифр используйте numpy.array() и array.astype() для преобразования кортежей массивов поплавка, если типа элемента является кортеж (проверьте тип с помощью isinstance() и еще повторить этот пункт и конвертировать типа поплавка):

>>> from ast import literal_eval 
>>> import numpy as np 
>>> np.array([np.array(i).astype(float) if isinstance(i,tuple) else np.repeat(np.array(i).astype(float),2) for i in map(literal_eval,B)]) 
array([[ 33., 207.], 
     [ 33., 408.], 
     [ 33., 408.], 
     [ 33., 408.], 
     [ nan, nan], 
     [ 33., 207.]])