首页 > 解决方案 > 将 Python 系列字符串转换为 18 位小数的浮点数

问题描述

我有以下熊猫系列:

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

列表中的每个数字都有 18 位小数(在查看任何格式之前,这就是确切的数字)。

my_series[0]因此,是 150,000.000000000000000000(十五万)。

my_series[1]因此,是 45.064744242514231410(四十五...)。

等等。

我基本上希望 Python 能够识别字符串并将它们转换为正确的浮点数,以便我稍后使用 thie Series 进行计算。我不需要打印正确格式的数字,而是让 Pythoin 识别它是 150,000 而不是 1,500,000,000 等等。

my_series[2]正确浮点数的示例:

2,618.61

我当前的代码:

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

这产生了以下错误:

TypeError: unsupported format string passed to generator.__format__

如何根据上述要求格式化系列中的字符串并获得正确的浮点数?

标签: pythonfloating-pointformattingseries

解决方案


经过几次迭代,我想我理解了 OP 的目的,所以我改变了我的例子。OP 似乎并不担心精度损失并且会出现值错误(可能是由于作为系列的一部分进入的无效字段)。通过添加一些故意伪造的输入,我已经修改了我的示例,使其接近 Pandas 中的情况。

my_series = [
    "not a number",
    "",
    "150000000000000000000000",
    "45064744242514231410",
    "2618611848503168287542",
    "7673975728717793369",
]


def convert_to_float(number):
    float_string = None
    my_float = None
    try:
        float_string = f"{int(number[:-18])}.{number[-18:]}"
        my_float = float(float_string)
    except ValueError as e:
        print(e)
        return None

    return my_float

numbers = list(map(convert_to_float, my_series))

for num in numbers:
    if num:
        print(f"{num :.18f}")

推荐阅读