Search code examples
pythonfloating-pointformattingseries

Convert Python Series of strings into float with 18 decimals


I have the following pandas Series:

my_series = ['150000000000000000000000', '45064744242514231410', '2618611848503168287542', '7673975728717793369']

Every number in the list has 18 decimal places (that's what dictates what number exactly it is, prior to seeing any formatting).

my_series[0], therefore, is 150,000.000000000000000000 (one hundred and fifty thousand).

my_series[1], therefore, is 45.064744242514231410 (fourty-five...).

And so on.

I basically want Python to recognize the strings and tunr them into the correct float for me to make calculations with thie Series later. I don't need to print the correct formatted number, rather, have Pythoin recognize it's a 150,000 instead of a 1,500,000,000 and so on.

Example for my_series[2] of what the corrrect float would be:

2,618.61

My current code:

[float("{:.18f}".format(int(item) for item in my_series))]

Which yields me the following error:

TypeError: unsupported format string passed to generator.__format__

How do I format the strings in the Series according to my requirements above and get the correct float?


Solution

  • You can convert the string to float and then apply formatting.

    my_series = ['150000000000000000000000', '45064744242514231410',
                 '2618611848503168287542', '7673975728717793369']
    ["{:,.2f}".format(float(item)/10**18) for item in my_series]
    
    ['150,000.00', '45.06', '2,618.61', '7.67']
    

    Note that this may lose some precision when converting the string to float. If this is a problem to you, then you may want to use either

    • Separate the integer part and decimal part and combine them when printing
    • Use Decimal class