报错信息:​​ValueError: could not convert string to float: ''​

解决方法:在将 ​​float64​​​ 类型的 numpy 数组赋值为字符串时,首先需要检查赋值的字符串是否可以转换为 ​​float64​​ 类型。

开发建议:虽然在往指定类型的 numpy 数组中赋值时,numpy 会自动进行隐式的强制类型转换,如果转换失败会直接抛出异常。因为对于开发者来说,这样的隐式强制转换是容易被忽略的,所以建议可以在写入 numpy 数组时候显式地进行转换,从而显式地提醒开发者这里存在强制类型转换,存在转换失败抛出异常的风险。


>>> import numpy as np
>>> array = np.array([1.0,2.0,3.0])

因为在构造 ​​array​​​ 数组时,数组中的值为 ​​float​​​ 类型,且没有通过 ​​dtype​​​ 指定数组类型,所以数组 ​​array​​​ 的 ​​dtype​​​ 会被 numpy 自动默认指定为 ​​float64​​。

>>> array.dtype
dtype('float64')

此时,我们给 ​​array​​​ 数组中第 1 个元素赋值为字符串 ​​"1.0"​​​,则 numpy 会自动将字符串 ​​"1.0"​​​ 强制转化为 ​​float64​​​ 类型。因为字符串 ​​"1.0"​​​ 可以强制转换为 ​​float64​​ 类型,所以这样的操作是可以执行的。

>>> array[1] = "1.0"
>>> array
array([1., 1., 3.])
>>> array.dtype
dtype('float64')

但是,如果我们给给 ​​array​​​ 数组中第 1 个元素赋值为字符串 ​​"x"​​​,则 numpy 仍然会自动尝试将字符串 ​​"x"​​​ 强制转化为 ​​float64​​ 类型,这显然是不行的,因此会报如下错误。

>>> array[1] = "x"
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: could not convert string to float: 'x'

特别需要注意的是,空字符串 ​​""​​​ 也是无法转化为 ​​float64​​ 类型的,同样会有类似的报错。

>>> array[1] = ""
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: could not convert string to float: ''