首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将带有“nan”的字符串转换为numpy

将带有“nan”的字符串转换为numpy
EN

Stack Overflow用户
提问于 2022-04-23 09:06:35
回答 2查看 99关注 0票数 1

我从文件中收到下面的字符串

代码语言:javascript
复制
data = 'data: [nan, nan, nan, nan, nan, nan, -10.34, nan, 4.45533]'

并希望将其转换为numpy数组。在python中有什么好方法可以这样做吗?

我已经试过了

代码语言:javascript
复制
x_values_list = np.fromstring(data[5:], dtype=float, sep=',')

但它只会让我-1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-23 09:33:45

注释中有一项建议指出,您需要切片以去掉方括号:

代码语言:javascript
复制
np.fromstring(data[7:-1], dtype=float, sep=',')

更通用的解决方案可能是使用regex只提取括号之间的部分:

代码语言:javascript
复制
import re
import numpy as np

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

如果您不确定是否会有匹配:

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

产出:

代码语言:javascript
复制
array([      nan,       nan,       nan,       nan,       nan,       nan,
       -10.34   ,       nan,   4.45533])
票数 4
EN

Stack Overflow用户

发布于 2022-04-23 11:08:33

这个问题没有具体说明如何实现它的期望输出和/或限制.

假设您的目标是获得一个类似于此的numpy.ndarray

代码语言:javascript
复制
[  0.        0.        0.        0.        0.        0.      -10.34
   0.        4.45533]

然后,您可以创建一个类似于

代码语言:javascript
复制
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

基本上

]

  • replaces

  • data:[nan移到0
  • creates中--从每个item
  • transforms中移出浮子--它进入numpy数组,
  • 打印出numpy数组,并打印出item
  • transforms

的类型。

它很简单,不管您不想要什么步骤,都可以轻松地去掉它(例如,如果您想要nan,删除替换它的函数行)。

正如您在下面的图像中所看到的,如果我测试它

我得到了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71978291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档