将带有 '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
,请删除被替换的函数行)。
如下图大家可以看到,如果我测试一下
我明白了
我从文件中收到以下字符串
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
,请删除被替换的函数行)。
如下图大家可以看到,如果我测试一下
我明白了