как преобразовать массив из строки в числовой формат?

Я только-только начал изучать Python. Помогите решить задачу: создаем список

curr_rez = list([])

создаем переменную el

tmp_list =list([])
for i in range(7):
    pos = str_part.rfind(",")
    el = str_part[pos+1 : len(str_part)]
    tmp_list.append(el.strip())
    str_part = str_part[:pos]

.......... Создание массива:

dynamic_predict = [el for el in curr_rez if el[0] <= up_1]

на выводе он выглядит так: [[11.0, 0.0, 0.0, 1172], [17.0, 0.0, 0.0, 1174], [39.0, 0.0, 0.0, 1178]] где первое значение - запись текущего времени второе и третье значения - действия объектов в этот момент времени четвертое значение - оценка состояния объектов

Есть проблема: при подготовке данных для Random Forest переменная(массив) dynamic_predict определяется как мета атрибут, т.е. просто текстовая строка. А нужно, чтобы определялось как массив чисел. Есть мысль, для каждой рассчитывать бинарный признак изменения и уже из этого делать массив, тогда все будет как надо. Подскажите пожалуйста, как это сделать? или может какое-то другое решение есть, главное, чтобы массив стал определяться, как числовой массив, а не текстовый

Привожу код до образования массива

import os
import csv
import io
import chardet
import codecs
import pandas as pd
import numpy as np

========================================== 

TIME_PREDICT_LONG    = 1
TIME_PREDICT_SHORT   = 1

for TIME_LONG in range(1, 1):
   
    TIME_SHORT       = 1


DELTA_SHORT      = SHORT_SECT[0]
DELTA_LONG       = LONG_SECT[0]


DATA_IN_PREDICT_AREA = 60
MINIMUM_SECTION_DATA = 5
#================================================================== 
def add_border(l1,l2):
    df_loc = pd.DataFrame(l1,columns=('t','b1','b2','tot'))
    df_loc = df_loc.interpolate(method = 'linear')
    l1_tmp = df_loc.values.tolist()
    l2_tmp = l2.copy()
    l_rez = list([])


    el_prev = l1_tmp[0]
    l_rez.append(el_prev)

    for i in range(1,len(l1_tmp)):
        el_cur = l1_tmp[i]
        if  l2_tmp ==[]  or el_cur[0] <= l2_tmp[0]:
            l_rez.append(el_cur)
            el_prev = el_cur
        else:
            f1 = el_prev[3]
            f2 = el_cur[3]
            t1 = el_prev[0]
            t2 = el_cur[0]
            t  = l2_tmp[0]
            
            t_tot =f1
            if abs(t1 - t2) >  0:
                t_tot = f2 * ((t-t1)/(t2-t1)) - f1*((t-t2)/(t2-t1))
                       
            ee = [ l2_tmp[0], el_prev[1], el_prev[2],t_tot]

            l_rez.append(ee)
            l_rez.append(el_cur)
            el_prev = el_cur
            l2_tmp=l2_tmp[1:]
    return l_rez
#==================================================================   
def is_digit(string:str) -> bool:
    if string.isdigit():
        return True
    else:
        try:
            float(string)
            return True
        except ValueError:
            return False
#=====================================================================
def extract_game_from_file(name_file: str):
        
    ful_name = data_path+name_file
    bytes = min(128, os.path.getsize(ful_name))
    raw = open(ful_name, 'rb').read(bytes)

    if raw.startswith(codecs.BOM_UTF8):
        encoding = 'utf-8-sig'
    else:
        result = chardet.detect(raw)
        encoding = result['encoding']
    #enc_list.append(encoding)
    #print(encoding)
    infile = io.open(ful_name, 'r', encoding=encoding)
    #dt=infile.read()
    owner = ''
    who1  = ''
    who2  = ''
    curr_rez = list([])
    count = 0
    prev_time = 0
    
    for line in infile.readlines():
        count += 1
        str_begin = line.find("[")
        str_end   = line.find("]")
        
        str_part  = line[(str_begin+1):(str_end)]
        
        if str_begin == -1 or str_end == -1 or len(str_part) < 50:
            
            continue
        
        tmp_list =list()
        for i in range(7):
            pos = str_part.rfind(",")
            el = str_part[pos+1 : len(str_part)]                        
            tmp_list.append(el.strip())
            str_part = str_part[:pos]
            
            
            
        if count == 1:
            # По структуре файлов эти данные
            # в каждой строке и достаточно одной
            ts = tmp_list[6]
            owner = ts[1:-1]
            ts= tmp_list[5]
            who1  = ts[1:-1]
            ts = tmp_list[4]
            who2  = ts[1:-1]
            
        
        curr_time = int(tmp_list[3])
                
               
        if is_digit(tmp_list[2]) and is_digit(tmp_list[1]):
            b1 = int(tmp_list[2])
            b2 = int(tmp_list[1])
            if b1 < 0 or b2 < 0:
               
                continue
        else:
            continue
            
        
        tl = tmp_list[0]
        if is_digit(tl):
            ttl=float(tl)
            if ttl == 0:
                ttl = np.nan
        else:
            ttl = np.nan
        
        if b1+b2 > ttl or b1+b2 + ttl < 1 or curr_time <=0 :
            print('ПОЛНАЯ ХРЕНЬ !!! в файле {} в строке {} \n b1:-> {} b2:-> {} ttl:-> {} currr_time:-> {}'.format(filename,count,b1,b2,ttl,curr_time))
            
            continue
        if curr_time > TIME_LONG:
            inf =  'Extract: недопустимо большое время :{}'.format(curr_time)
            print(inf)
            
            continue
        
        if curr_time >= prev_time:
            curr_rez.append([curr_time,b1,b2,ttl])
            prev_time = curr_time
        else:
            continue
   
    infile.close()
   
    if len(curr_rez) < DATA_IN_PREDICT_AREA:
        inf = 'Extract: {}-> исключен, число  строк всего :'.format(filename)
        raise MyError(inf, len(curr_rez))

    type_time = curr_rez[-1][0]
    if type_time < 2090:
        inf =  'Extract: {}-> исключен, до времени предсказания :'.format(type_time)
        raise MyError(inf,len(curr_rez))
    
    type_game = 'short'
    if type_time >= 1:
        type_game = 'long'
    
    if type_game == 'short':
        curr_rez = add_border(curr_rez ,SHORT_SECT)
    else:
        curr_rez = add_border(curr_rez ,LONG_SECT)
        
    up_1 = TIME_PREDICT_SHORT
    up_2 = TIME_SHORT
    if type_game =='long':
        up_1 = TIME_PREDICT_LONG
        up_2 = TIME_LONG
        
    dynamic_predict         = [el for el in curr_rez if el[0] <= up_1]

Ответы (1 шт):

Автор решения: n1tr0xs

По идее должно работать так:

tmp_list.append(list(map(int, el.strip())))

Чтобы создать пустой список достаточно просто вызвать функцию list без аргументов:
tmp = list(), или можно сделать так: tmp = []

А вообще это можно сделать так:

str_part = '1 1 1 1,2 2 2 2,3 3 3 3'
tmp_list = list(map(int, part.split())) for part in str_part.split(',')[::-1]
→ Ссылка