как преобразовать массив из строки в числовой формат?
на выводе он выглядит так: [[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] 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 в строке <> \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]
преобразование числа в список [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 6 лет назад .
b = 456; c = str(b); x = list(c); z = str(x); a = int(z);
почему невозможно преобразовать int к типу list и обратно в int ? логикеа такая, с int превращает в str, с str в list, а потов в обратном направлении
Отслеживать
задан 24 ноя 2017 в 13:24
117 1 1 золотой знак 1 1 серебряный знак 11 11 бронзовых знаков
а как вы представляете себе преобразование списка в число? Возьмите 0 элемент например.
24 ноя 2017 в 13:27
Думаю для всех очевидно что 0 должен быть пустым списком, а 2 должно быть [1, 0]. 🙂
24 ноя 2017 в 13:28
@Arnial А 3 должно быть [2, 1, 0] или [1, 1]?
24 ноя 2017 в 13:48
что вы ожидаете получить? Приведите явный пример и словами детально опишите
24 ноя 2017 в 13:54
Pero, всё равно непонятно. Вы хотите получить список из цифр числа, записанного в десятичном представлении?
28 ноя 2017 в 8:36
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
z = str(x);
Стоит заменить на
z = ''.join(x)
И что мешает самому написать преобразование?
x = 1234 result = [] while x > 0: result.append(x % 10) x //= 10 result.reverse() print(result) # [1, 2, 3, 4] num = 0 for i, v in enumerate(reversed(result)): num += v * 10 ** i print(num) # 1234
Отслеживать
ответ дан 24 ноя 2017 в 13:51
6,161 3 3 золотых знака 20 20 серебряных знаков 38 38 бронзовых знаков
Вы вероятно хотите, чтобы
list(456) == [4, 5, 6]
int([4, 5, 6]) == 456
Но функция list() работает только с объектами, которые имеют интерфейс iterable , например с множествами , строками , итераторами и генераторами - просто со всем, что может использоваться в цикле for перед двоеточием:
for i in range(10): for i in (2, 3, 5): for i in "abcd":
Теоретически бы могло быть по меньшей мере
list(любый_объект) == [любый_объект]
но ни это не так, потому что бы могли возникнуть проблемы:
i = 456 list(i) # [456] или [i] ? [456] всегда то самое, но [i] меняется с i
С другой стороны, функция int() не может работать со списками - что разумное можно ожидать например от
int(["abc", [3.7, i, (5, 2)], True, (max, 1)]) # .
Как преобразовать массив в строку python?
И, когда идет вывод с парсера этих строк, эти данные являются массивом. Как мне их преобразовать в строку?
textp=soup.find_all('p') print(textp)
Отслеживать
5,125 1 1 золотой знак 14 14 серебряных знаков 31 31 бронзовый знак
задан 2 авг 2019 в 5:49
49 1 1 золотой знак 3 3 серебряных знака 13 13 бронзовых знаков
попробуйте print(str(textp))
2 авг 2019 в 5:52
Спасибо но я нашел другой метод при принте я использовал метод join
2 авг 2019 в 6:18
отлично, а теперь удалите свой join и используйте вместо него str . На лицо лаконичность, понятность и отсутствие бесполезного цикла)
2 авг 2019 в 6:22
Viktorov вы не правы, print(str(['a', 'b'])) выведет строку: ['a', 'b']. А вот print(''.join(['a', 'b'])) выведет строку: ab
Как превратить массив в число в Python: простой способ
Чтобы преобразовать массив в число в Python, вы можете использовать функцию join для объединения всех элементов массива в одну строку, а затем применить функцию int для преобразования этой строки в число.
numbers = [1, 2, 3, 4, 5] array_as_string = ''.join(map(str, numbers)) number = int(array_as_string) print(number)
В этом примере мы объединяем все элементы массива в строку с помощью функции join и функции map , которая преобразует каждый элемент в строку. Затем мы используем функцию int , чтобы преобразовать эту строку в число. Результат будет выведен на экран.
Детальный ответ
Как массив превратить в число в Python
Часто при работе с числами в Python возникает необходимость преобразовать массив в число. Существует несколько способов, которые позволяют выполнить данную операцию. В этой статье мы рассмотрим несколько вариантов.
1. Использование функции join()
Один из самых простых способов преобразовать массив в число - это использование функции join(). Функция join() объединяет элементы массива в одну строку и затем можно легко преобразовать эту строку в число.
array = [1, 2, 3, 4, 5] string = ''.join(str(element) for element in array) number = int(string) print(number)
В данном примере мы сначала используем генератор, чтобы преобразовать каждый элемент массива в строку, а затем объединяем все строки в одну при помощи функции join(). После этого используем функцию int() для преобразования полученной строки в число.
2. Использование функции map() и функции join()
Другой способ - это использование функции map() в сочетании с функцией join(). Функция map() позволяет применить заданную функцию к каждому элементу массива, получившиеся результаты затем объединяются при помощи функции join(). Результатом будет строка, которую можно преобразовать в число.
array = [1, 2, 3, 4, 5] string = ''.join(map(str, array)) number = int(string) print(number)
В данном примере мы используем функцию map() для преобразования каждого элемента массива в строку, а затем объединяем полученные строки в одну.
3. Использование функции reduce()
Третий способ - это использование функции reduce() из модуля functools. Функция reduce() принимает функцию и последовательность элементов, и последовательно применяет заданную функцию к элементам, чтобы получить одно значение. В данном случае мы будем использовать функцию сложения, чтобы объединить элементы массива в одно число.
from functools import reduce array = [1, 2, 3, 4, 5] number = reduce(lambda x, y: x * 10 + y, array) print(number)
В данном примере мы используем лямбда-функцию, которая складывает значения последовательно. Функция reduce() применяет эту лямбда-функцию ко всем элементам массива, получая в результате число.
4. Использование функции sum()
Если массив состоит только из чисел, можно использовать функцию sum() для получения суммы всех элементов массива. Результатом будет число, которое является суммой всех значений в массиве.
array = [1, 2, 3, 4, 5] number = sum(array) print(number)
Заключение
Мы рассмотрели несколько способов преобразовать массив в число в Python. Каждый из этих способов имеет свои особенности и может быть полезен в разных ситуациях. Выбор конкретного способа зависит от требований вашей задачи и ваших предпочтений.