Python 尽可能将字符串转换为浮点
假设我有一张单子Python 尽可能将字符串转换为浮点,python,string,numpy,floating-point,Python,String,Numpy,Floating Point,假设我有一张单子 mix = numpy.array(['1.', '2.', 'a']) 我如何在可能的情况下将字符串转换为float,以便获得: array([1., 2., 'a']) 我尝试将try/exception与astype()一起使用,但它不会转换单个元素 更新: 在csv包中,有csv.QUOTE\u NONNUMERIC,我想知道numpy是否支持类似的功能 没有找到使其工作的函数,所以我写了一些适合您的东西 def myArrayConverter(arr):
mix = numpy.array(['1.', '2.', 'a'])
我如何在可能的情况下将字符串转换为float,以便获得:
array([1., 2., 'a'])
我尝试将try/exception
与astype()
一起使用,但它不会转换单个元素
更新:
在
csv
包中,有csv.QUOTE\u NONNUMERIC
,我想知道numpy
是否支持类似的功能 没有找到使其工作的函数,所以我写了一些适合您的东西
def myArrayConverter(arr):
convertArr = []
for s in arr.ravel():
try:
value = float32(s)
except ValueError:
value = s
convertArr.append(value)
return array(convertArr,dtype=object).reshape(arr.shape)
为混合数据类型数组集干杯
dtype=object
:
>>> mix = numpy.array(['1.', '2.', 'a'])
>>> mixed=[]
>>> for a in list(mix):
try:
mixed.append(float(a))
except:
mixed.append(a)
>>> mixed=numpy.array(mixed, dtype=object)
>>> mixed
array([1.0, 2.0, 'a'], dtype=object)
>>> type(mixed[0]),type(mixed[1]),type(mixed[2])
(<type 'float'>, <type 'float'>, <type 'numpy.string_'>)
mix=numpy.array(['1','2','a'])
>>>混合=[]
>>>对于输入列表(混合):
尝试:
混合。附加(浮点(a))
除:
混合。追加(a)
>>>mixed=numpy.array(mixed,dtype=object)
>>>混合的
数组([1.0,2.0,'a'],dtype=object)
>>>类型(混合[0])、类型(混合[1])、类型(混合[2])
(, )
希望如此。一种可能有效的方法是检查字符串是否与正则表达式匹配,如果匹配,则转换为float:
[float(x) if re.search('[0-9]*\.?[0-9]', x) else x for x in mix]
我试图找到一个现有的函数来实现这一点,但也无法。。你的功能不错,但不是万能的。例如,无法处理二维数组。但请放弃投票支持您的即时回复,manHi平反,您并没有指定您想要的东西适用于更多维度。根据你的例子,前面给出的答案对你来说非常合适。在没有太多调整的情况下,我编辑了解决方案,现在它可以处理任意多个维度。希望有帮助。这是一个伟大的人,只是希望他们能开发一种条件转换的方法。