将numpy字符串数组转换为int数组

时间:2014-01-30 08:59:21

标签: python numpy


我有一个numpy.ndarray

a = [['-0.99' '' '0.56' ..., '0.56' '-2.02' '-0.96']]

如何将其转换为int?

输出:

a = [[-0.99 0.0 0.56 ..., 0.56 -2.02 -0.96]]

我想要0.0代替空白''

2 个答案:

答案 0 :(得分:6)

import numpy as np

a = np.array([['-0.99', '', '0.56', '0.56', '-2.02', '-0.96']])
a[a == ''] = 0.0
a = a.astype(np.float)

结果是:

[[-0.99  0.    0.56  0.56 -2.02 -0.96]]

您的值是浮点数,而不是整数。目前尚不清楚是否需要列表或numpy数组作为最终结果。您可以轻松获得这样的列表列表:

a = a.tolist()

结果:

[[-0.99, 0.0, 0.56, 0.56, -2.02, -0.96]]

答案 1 :(得分:1)

这是一个纯粹的python解决方案,它会产生 list

通过简单的python操作,您可以使用float映射内部列表。这会将所有字符串元素转换为float并将其指定为列表的零索引项。

a = [['-0.99' , '0.56' , '0.56' , '0.56', '-2.02' , '-0.96']]

a[0] = map(float, a[0])

print a
[[-0.99, 0.56, 0.56, 0.56, -2.02, -0.96]]

更新:请尝试以下

a = [['-0.99' , '0.56' , '0.56' , '0.56', '-2.02' , '-0.96', '', 'nan']]
for _position, _value in enumerate(a[0]):
    try:
        _new_value = float(_value)
    except ValueError:
        _new_value = 0.0
    a[0][_position] = _new_value

[[-0.99, 0.56, 0.56, 0.56, -2.02, -0.96, 0.0, nan]]

它枚举列表中的对象并尝试将它们解析为float,如果失败,则将其替换为0.0