Получить n-е непустое значение из массива numpy - PullRequest
0 голосов
/ 20 марта 2020

У меня есть куча данных, которые я пытаюсь автоматизировать, извлекая текстовые файлы. Я могу легко добавлять значения к numpy массивам и преобразовывать данные из строк чисел в числа с плавающей запятой, но проблема в том, что строки могут различаться по размеру. Фрагмент кода можно увидеть ниже:

pro1 = ' profile1    : (   99.27,    99.19)   20.82      1.75    4.40    0.86    22.05\n'
pro2 = ' profile2    : (  100.31,    99.45)   18.97     10.22    3.00    0.35   -73.86\n'

split_data1 = pro1.split(" ") split_data2 = pro2.split(" ")

Я хочу 3-е, 4-е и 5-е числа из этих профилей (т.е. 20,82, 1,75, 4,40, 18,97, 10.22, 3.00). У меня есть проблемы с разделением данных, так как индекс мне нужно будет изменить в зависимости от того, сколько цифр имеет каждое число (например, 99.27 занимает другой индекс, чем 100.31, а 1.75 занимает другой индекс, чем 10.22, и это меняет остальные индекса строк, а также). Также у меня около 30 000 таких профилей, поэтому мне нужно автоматизировать их. Есть ли способ убедиться, что я всегда получаю правильные числа из строки, чтобы я мог преобразовать ее в числа с плавающей точкой? Есть ли способ получить python, чтобы дать вам n-е непустое значение в массиве numpy?

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете просто filter результирующая последовательность:

import itertools as it

result = tuple(it.islice(filter(None, pro1.split(' ')), 3, 6))

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

import re

result = re.sub(' {2,}', ' ', pro1).split(' ')[3:6]

Приведенные выше подходы обобщают для различных разделители также, однако для указанного c варианта использования разделения на пробел вы можете использовать просто split без аргумента:

result = pro1.split()[3:6]
...