convert strings in list to float
Solution 1
you can use map and lambda to remove comma and convert the list of string floats to list of floats
result = list(map(lambda x: float(x.replace(",", "")), list_of_string_floats))
for integers it would be
result = list(map(lambda x: int(x.replace(",", "")), list_of_string_ints))
There is no need to use numpy
Solution 2
You first have to get rid of the ",".
s = '7,051,156,075,145'
f = float(s.replace(',',''))
After this, f is the float value of the given string.
For the whole thing, you can do this:
float_list = [float(s.replace(',','')) for s in string_list]
Solution 3
The most readable if L is your original list:
[[float(x) for x in s.split(',')] for s in L ]
Burray
Updated on December 02, 2022Comments
-
Burray over 1 year
this issue is driving me nuts. I have a scrapped data from a website and put those data into a dictionary. As a result I have a couple of lists and one of those lists looks like this:
'In': ['7,051,156,075,145', '878,009,569,197', '427,386,441,994', '278,189,230,134', '230,599,954,634', '197,088,252,840', '101,610,549,933', '78,426,830,219', '80,925,933,532', '58,451,193,176', '55,701,282,247', '49,748,756,546', '48,642,591,960', '45,686,162,172', '44,227,235,911', '40,467,951,256', '16,392,881,465', '5,988,546,624', '41,810,356,569', '23,515,110,330', '35,815,116,718', '10,968,016,226', '518,858,345', '29,947,210,177', '29,030,975,280', '28,803,225,552', '373,570,428', '27,527,784,709', '373,964,822', '514,671,410', '25,875,702,735', '416,462,736', '24,423,209,779', '24,332,893,924', '22,491,450,198', '22,894,037,015', '23,026,866,310', '6,148,324,700', '22,226,875,309', '21,127,010,221', '375,662,568', '18,845,330,059', '238,084,409', '18,338,638,037', '6,469,472,952', '16,988,637,757', '234,705,103', '16,164,528,769', '236,542,082', '15,878,894,181', '15,892,415,892', '384,601,333', '173,719,914', '14,374,301,195', '13,789,745,661', '13,333,600,469', '12,935,822,692', '1,414,494,923', '13,000,908,688', '2,875,324,761', '280,912,611', '12,443,874,812', '12,470,333,848', '188,668,181', '12,092,658,438', '676,583,644', '11,997,025,285', '11,677,854,811', '220,087,430', '11,251,777,539', '11,442,705,899', '8,628,429,553', '190,648,851', '11,187,421,523', '3,684,540,569', '10,670,576,444', '10,740,578,885', '10,582,331,778', '10,557,152,315', '9,804,556,177', '10,325,762,681', '10,193,777,314', '10,241,020,644', '10,218,671,348', '5,565,872,689', '6,066,496,977', '128,971,640', '160,853,134', '3,061,365,095', '8,849,393,167', '182,484,904', '161,406,328', '9,335,264,956', '158,941,175', '8,893,005,099', '132,642,660', '147,492,645', '133,898,533', '8,565,414,335', '8,543,285,361', '1,081,514,186', '8,010,900,010', '344,032,888', '7,851,320,645', '119,252,217', '7,708,770,926', '3,831,828,937', '266,060,360', '7,469,255,927', '2,553,584,433', '7,404,456,294', '1,775,993,183', '7,338,693,939', '7,337,702,662', '7,246,023,792', '3,147,875,441', '142,555,296', '1,953,694,528', '3,918,267,288', '1,324,557,844', '5,683,622,890', '6,927,422,982', '106,687,337', '6,912,850,849', '2,845,801,508', '6,818,774,192', '6,853,915,064', '147,347,763', '344,146,667', '6,711,901,497', '6,570,349,311', '6,519,300,790', '135,371,330', '6,472,184,188', '84,726,075', '6,224,918,718', '5,795,088,428', '5,348,330,674', '76,438,957', '6,156,100,475', '6,046,328,039', '1,572,859,369', '5,966,535,367', '5,960,854,825', '5,844,987,758', '99,526,367', '3,320,692,742', '5,763,785,447', '332,891,989', '5,673,010,795', '2,120,698,374', '5,600,425,762', '3,406,789,774']
The values have been stored as strings which I think could be directly converted to floats but I dont know how. Nevermind, I thought I could just convert those values into floats and work with them further. However I cant get it to work. I assigned the list to the variable "bob" and tried the following code to convert to float:
empty = [] der = np.array(empty, dtype = np.float32) der = np.append(der, bob)
When i try
print(der/2)
it gives me this: "TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''"
whats going on here? Where is my mistake?
I appreciate any help! Thanks
-
marmeladze almost 7 yearsbtw, do you want to convert whole
7,051,156,075,145
to float? (sth like, 7051156075145.0). or every comma delimited string? (7.0
,51.0
and so on)
-
-
Burray almost 7 yearsawesome! thank you. When i try to do b = result/2 it gives me "unsupported operand type(s) for /: 'list' and 'list'" Why is that?
-
rrawat almost 7 yearsyou can divide each element of the list, not the entire list. Just loop over the list e.g for x in result: b = x/2 Also could you please mark the answer as accepted, it it helped you?