convert strings in list to float

10,305

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 ]  
Share:
10,305
Burray
Author by

Burray

Updated on December 02, 2022

Comments

  • Burray
    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
      marmeladze almost 7 years
      btw, 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
    Burray almost 7 years
    awesome! 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
    rrawat almost 7 years
    you 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?