Python从ElasticSearch获取浮点数作为浮点数数组

时间:2019-01-27 04:17:01

标签: python arrays elasticsearch

在elasticsearch中,我的一个字段存储了一个浮点值数组。例如,

-0.13672447204589844, 0.18057402968406677, -0.0991324931383133,

我正在尝试检索这些值并将其存储在float数组中。我正在使用以下代码:

res=es.search(index="g6jy834005er",body=data)
arr=[]
for hit in res['hits']['hits']:
    r="%(encod)s" % hit["_source"]
    print(r)

这会打印出这样的数组:

[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]
[[-0.11659730970859528, 0.019643619656562805, 0.08672580868005753]]

当我检查数组的类型时,我使用print(type(r))

<class 'str'>
<class 'str'>
<class 'str'>

我尝试了以下方法将str数组转换为float:

Trial 1
res = [ eval(x[0]) for x in r ]

Trial 2
res = np.asarray(r, dtype=np.float64, order='C')

Trial 3
res = list(map(float,r))

他们都没有工作。如何将str数组转换为float数组?

1 个答案:

答案 0 :(得分:1)

使用ast.literal_eval

import ast
res=es.search(index="g6jy834005er",body=data)
arr=[]
for hit in res['hits']['hits']:
    r="%(encod)s" % hit["_source"]
    r=ast.literal_eval(r)
    print(r)

现在的类型将是预期的list,但是如果您想要一个numpy数组:

import ast
res=es.search(index="g6jy834005er",body=data)
arr=[]
for hit in res['hits']['hits']:
    r="%(encod)s" % hit["_source"]
    r=np.array(ast.literal_eval(r))
    print(r)

然后类型将是一个numpy数组。