【问题标题】:replace an empty numpy string with 0用 0 替换一个空的 numpy 字符串
【发布时间】:2018-04-29 18:00:45
【问题描述】:

我必须 numpy 字符串数组,看起来像这样:

[['0', '', '12.12', '140.65', '', ''],
['3', '', '10.45', '154.45', '', ''],
['5', '', '15.65', '184.74', '', '']]

我需要做的是用数字替换空单元格,以便将其转换为浮点数组。我不能只删除列,因为在某些情况下,空单元格已被填充。我试过这个:

data = np.char.replace(data, '','0').astype(np.float64)

但这只会在所有字符之间的任何地方放置一个 0,并最终如下:

[[0, 0, 1020.0102, 104000.0605, 0, 0],
[30, 0, 1000.0405, 105040.0405, 0, 0],
[50, 0, 1050.0605, 108040.0704, 0, 0]]

我不明白为什么 python 会那样做?我通过谷歌搜索但找不到 numpy.char.replace 的一个很好的解释。谁能给我解释一下它是如何工作的?

【问题讨论】:

标签: python arrays string numpy replace


【解决方案1】:
>>> a = np.array([['0', '', '12.12', '140.65', '', ''],
... ['3', '', '10.45', '154.45', '', ''],
... ['5', '', '15.65', '184.74', '', '']])
>>> a[a == ''] = 0
>>> a.astype(np.float64)
array([[   0.  ,    0.  ,   12.12,  140.65,    0.  ,    0.  ],
       [   3.  ,    0.  ,   10.45,  154.45,    0.  ,    0.  ],
       [   5.  ,    0.  ,   15.65,  184.74,    0.  ,    0.  ]])

【讨论】:

  • 您可能希望在初始数组中包含空字符串,例如 OP
  • @ixop 复制粘贴失败。给我一秒钟。
  • 完美,效果很好!感谢您的快速答复!
  • @Toggo replace 对子字符串进行操作,因此它或多或少会检查每个字符串的每个位置以替换字符串。由于 '' 在任何地方都匹配,因此您将在任何地方插入 '0'。
  • @Paul Panzer 好吧,我猜会是这样。是否有可能使用整个字符串而不是子字符串进行替换操作?
【解决方案2】:

data = np.char.replace(data, '','0')

它似乎替换了所有空的地方,比如''有一个地方,'0'有两个地方,'12.12'有6个地方。结果是

[['000' '0' '01020.01020' '0104000.06050' '0' '0']
 ['030' '0' '01000.04050' '0105040.04050' '0' '0']
 ['050' '0' '01050.06050' '0108040.07040' '0' '0']]

试试这个:

import numpy as np

a = np.array([['0', '', '12.12', '140.65', '', ''],
              ['3', '', '10.45', '154.45', '', ''],
              ['5', '', '15.65', '184.74', '', '']])

#a[np.where(a == '')] = '0'
a[a == ''] = '0'

a = a.astype(np.float64)

print(a)

【讨论】:

    【解决方案3】:

    我知道这是一个老问题,但不幸的是,今天接受的答案不能正常工作。如果您进行[a == ''] 比较,您将获得 FutureWarning:

    FutureWarning: elementwise comparison failed; returning scalar
    instead, but in the future will perform elementwise comparison
    

    一种无需担心就可以解决问题的方法是使用numpy.where()

       import numpy as np
       a = np.array([['0', '', '12.12', '140.65', '', ''],
                   ['3', '', '10.45', '154.45', '', ''],
                   ['5', '', '15.65', '184.74', '', '']])
    
       result = np.where(a=='', '0', a)
       print(result)
    

    结果是

    [['0' '0' '12.12' '140.65' '0' '0']  
     ['3' '0' '10.45' '154.45' '0' '0']  
     ['5' '0' '15.65' '184.74' '0' '0']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2021-12-04
      • 2021-11-30
      • 2012-01-11
      • 1970-01-01
      • 2014-08-10
      • 2013-12-03
      相关资源
      最近更新 更多