将带有 'nan' 的字符串转换为 numpy

converting a string with 'nan' into 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=',')

但它只是 returns 我 [-1]

评论中的一个建议表明您需要切片才能去掉括号:

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,请删除被替换的函数行)。

如下图大家可以看到,如果我测试一下

我明白了