【问题标题】:convert numpy string array into int array [duplicate]将numpy字符串数组转换为int数组[重复]
【发布时间】:2014-01-30 08:59:20
【问题描述】:

我有一个 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 代替空白 ''

【问题讨论】:

  • 试试a.astye(float)。请记住,a 必须是一个 numpy 数组。
  • 它说 AttributeError: 'numpy.ndarray' object has no attribute 'astye'
  • 它是astype,这就是你要找的东西
  • NumPy 使用arrays。不确定您所说的 NumPy 列表是什么意思...
  • 它不是重复的。详细看问题。我也有空字符串。

标签: python numpy


【解决方案1】:
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]]

【讨论】:

    【解决方案2】:

    这是一个纯 Python 解决方案,它会生成一个 list

    通过简单的python操作,你可以用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

    【讨论】:

    • 如果它有一个空字符串怎么办。检查更新的问题
    • 好的,我更新我的答案并让它处理您列表中的所有内容。如果无法解析,则替换为0.0
    • 它还保留了nan 值。
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2022-07-07
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多