Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尽可能将字符串转换为浮点_Python_String_Numpy_Floating Point - Fatal编程技术网

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平反,您并没有指定您想要的东西适用于更多维度。根据你的例子,前面给出的答案对你来说非常合适。在没有太多调整的情况下,我编辑了解决方案,现在它可以处理任意多个维度。希望有帮助。这是一个伟大的人,只是希望他们能开发一种条件转换的方法。