首页 > 解决方案 > 从 numpy 数组中获取第 n 个非空值

问题描述

我有一堆数据,我正试图自动从文本文件中取出。我可以轻松地将 vlaues 附加到 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 给你一个 numpy 数组中的第 n 个非空值?

标签: pythonarraysnumpysplit

解决方案


您可以只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]

上述方法也适用于不同的分隔符,但是对于在空格上拆分的特定用例,您可以split不带参数地使用:

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

推荐阅读