Reputation:
I have a script which reads a text file, pulls decimal numbers out of it as strings and places them into a list.
So I have this list:
my_list = ['0.49', '0.54', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']
How do I convert each of the values in the list from a string to a float?
I have tried:
for item in my_list:
float(item)
But this doesn't seem to work for me.
Upvotes: 362
Views: 1168518
Reputation: 125
You can use the map()
function to convert the list directly to floats
:
float_list = map(float, list)
Upvotes: 7
Reputation: 800
This would be an other method (without using any loop!):
import numpy as np
list(np.float_(list_name))
Upvotes: 39
Reputation: 46
you can use numpy to avoid looping:
import numpy as np
list(np.array(my_list).astype(float)
Upvotes: 2
Reputation: 1
I have solve this problem in my program using:
number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Upvotes: -1
Reputation: 1622
I had to extract numbers first from a list of float strings:
df4['sscore'] = df4['simscore'].str.findall('\d+\.\d+')
then each convert to a float:
ad=[]
for z in range(len(df4)):
ad.append([float(i) for i in df4['sscore'][z]])
in the end assign all floats to a dataframe as float64:
df4['fscore'] = np.array(ad,dtype=float)
Upvotes: 0
Reputation: 956
you can even do this by numpy
import numpy as np
np.array(your_list,dtype=float)
this return np array of your list as float
you also can set 'dtype' as int
Upvotes: 16
Reputation: 1
import numpy as np
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54',
'0.55', '0.55', '0.54']
print(type(my_list), type(my_list[0]))
# <class 'list'> <class 'str'>
which displays the type as a list of strings. You can convert this list to an array of floats simultaneously using numpy:
my_list = np.array(my_list).astype(np.float)
print(type(my_list), type(my_list[0]))
# <class 'numpy.ndarray'> <class 'numpy.float64'>
Upvotes: 0
Reputation: 191
This is how I would do it.
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54',
'0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54',
'0.55', '0.55', '0.54']
print type(my_list[0]) # prints <type 'str'>
my_list = [float(i) for i in my_list]
print type(my_list[0]) # prints <type 'float'>
Upvotes: 2
Reputation: 735
You can use numpy to convert a list directly to a floating array or matrix.
import numpy as np
list_ex = [1, 0] # This a list
list_int = np.array(list_ex) # This is a numpy integer array
If you want to convert the integer array to a floating array then add 0. to it
list_float = np.array(list_ex) + 0. # This is a numpy floating array
Upvotes: 3
Reputation: 33250
float(item)
do the right thing: it converts its argument to float and and return it, but it doesn't change argument in-place. A simple fix for your code is:
new_list = []
for item in list:
new_list.append(float(item))
The same code can written shorter using list comprehension: new_list = [float(i) for i in list]
To change list in-place:
for index, item in enumerate(list):
list[index] = float(item)
BTW, avoid using list
for your variables, since it masquerades built-in function with the same name.
Upvotes: 17
Reputation: 336478
map(float, mylist)
should do it.
(In Python 3, map ceases to return a list object, so if you want a new list and not just something to iterate over, you either need list(map(float, mylist)
- or use SilentGhost's answer which arguably is more pythonic.)
Upvotes: 167
Reputation: 319949
[float(i) for i in lst]
to be precise, it creates a new list with float values. Unlike the map
approach it will work in py3k.
Upvotes: 631