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.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
[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.
Method 2
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.)
Method 3
This would be an other method (without using any loop!):
import numpy as np list(np.float_(list_name))
Method 4
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.
Method 5
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
Method 6
You can use the map() function to convert the list directly to floats:
float_list = map(float, list)
Method 7
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
Method 8
you can use numpy to avoid looping:
import numpy as np list(np.array(my_list).astype(float)
Method 9
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'>
Method 10
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'>
Method 11
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)
Method 12
I have solve this problem in my program using:
number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Method 13
for i in range(len(list)): list[i]=float(list[i])
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0