用0替换空的numpy字符串

时间:2017-11-16 09:10:32

标签: python arrays string numpy replace

我必须看起来像这样的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的好解释。任何人都可以向我解释它是如何工作的吗?

3 个答案:

答案 0 :(得分:3)

>>> 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.  ]])

答案 1 :(得分:0)

  

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

它似乎取代了所有空白的地方,例如''有一个地方,' 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)

答案 2 :(得分:0)

我知道这是一个老问题,但不幸的是,今天接受的答案不能正常工作。如果您进行 NumPy 比较,您将收到 FutureWarning:

image.shape

一种可以毫无预兆地解决问题的方法是使用 [a == '']

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

结果是

numpy.where()