Преобразование строки с 'nan' в numpy

Я получаю строку ниже из файла

data = 'data: [nan, nan, nan, nan, nan, nan, -10.34, nan, 4.45533]'

и хотел бы преобразовать это в массив numpy. Есть ли хороший способ сделать это в python?

я уже пробовал это

x_values_list = np.fromstring(data[5:], dtype=float, sep=',')

Но это просто возвращает меня [-1]

попробуйте data[7:-1] - вам понадобится только последовательность значений, разделенных запятыми, без дополнительных символов, таких как скобки и т. д.

FObersteiner 23.04.2022 11:13
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
1
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Предложение в комментариях указало, что вам нужно нарезать, чтобы избавиться от скобок:

np.fromstring(data[7:-1], dtype=float, sep=',')

Более общим решением может быть использование регулярного выражения для извлечения только части между скобками:

import re
import numpy as np

a = np.fromstring(re.search(r'(?<=\[)[^\[\]]+(?=\])', data).group(),
                  dtype=float, sep=',')

Если вы не уверены, что будет совпадение:

m = re.search(r'(?<=\[)[^\[\]]+(?=\])', data)
if m:
    a = np.fromstring(m.group(), dtype=float, sep=',')
else:
    a = np.array([])

выход:

array([      nan,       nan,       nan,       nan,       nan,       nan,
       -10.34   ,       nan,   4.45533])

В вопросе не указан желаемый результат и/или ограничения на то, как его достичь...

Предположим, ваша цель — получить numpy.ndarray подобный этому

[  0.        0.        0.        0.        0.        0.      -10.34
   0.        4.45533]

то вы можете создать такую ​​функцию, как

import numpy as np

def string_to_numpy_array(data):
    data = data.replace('data: ', '')
    data = data.replace('[', '')
    data = data.replace(']', '')
    data = data.replace('nan', '0')
    data = data.split(',')
    data = [float(i) for i in data]
    data = np.array(data)
    print(data)
    print(type(data))
    return data

Это в основном

  • удаляет data: , [ и ]
  • заменяет nan на 0
  • создает поплавок из каждого элемента
  • преобразует его в массив numpy
  • печатает массив numpy и тип для здравомыслия

Это просто, и любой шаг, который вам не нужен, вы можете легко удалить (например, если вы хотите nan, удалите строку функции, в которой она заменяется).

Как вы можете видеть на следующем изображении, если я проверю его

enter image description here

я получил

enter image description here

Другие вопросы по теме