Converting numpy string array to float: Bizarre?

numpy, python, type-conversion

Solution

Numpy arrays must have one `dtype` unless it is structured. Since you have some strings in the array, they must all be strings.

If you wish to have a complex `dtype`, you may do so:

import numpy as np
a = np.array([('Bob','4.56'), ('Sam','5.22'),('Amy', '1.22')], dtype = [('name','S3'),('val',float)])

Note that `a` is now a 1d structured array, where each element is a tuple of type `dtype`.

You can access the values using their field name:

In [21]: a = np.array([('Bob','4.56'), ('Sam','5.22'),('Amy', '1.22')],
    ...:         dtype = [('name','S3'),('val',float)])

In [22]: a
Out[22]: 
array([('Bob', 4.56), ('Sam', 5.22), ('Amy', 1.22)], 
      dtype=[('name', 'S3'), ('val', '<f8')])

In [23]: a['val']
Out[23]: array([ 4.56,  5.22,  1.22])

In [24]: a['name']
Out[24]: 
array(['Bob', 'Sam', 'Amy'], 
      dtype='|S3')

Problem

So, this should be a really straightforward thing but for whatever reason, nothing I'm doing to convert an array of strings to an array of floats is working. I have a two column array, like so: ``` Name Value Bob 4.56 Sam 5.22 Amy 1.22 ``` I try this: ``` for row in myarray[1:,]: row[1]=float(row[1]) ``` And this: ``` for row in myarray[1:,]: row[1]=row[1].astype(1) ``` And this: ``` myarray[1:,1] = map(float, myarray[1:,1]) ``` And they all seem to do something, but when I double check: ``` type(myarray[9,1]) ``` I get ``` <type> 'numpy.string_'> ```

Original source

Related problems