将 Python 系列字符串转换为带 18 位小数的浮点数

Convert Python Series of strings into float with 18 decimals

我有以下pandas系列:

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

列表中的每个数字都有 18 位小数(在查看任何格式之前,这决定了它到底是什么数字)。

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

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

以此类推

我基本上希望 Python 识别字符串并将它们转换为正确的浮点数,以便我稍后使用该系列进行计算。 我不需要打印正确格式的数字,而是让 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__

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

经过几次迭代,我想我明白了 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}")

您可以将字符串转换为浮点数,然后应用格式设置。

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']

请注意,这在将字符串转换为浮点数时可能会损失一些精度。 如果这对您来说是个问题,那么您可能需要使用

  • 打印时将整数部分和小数部分分开并合并
  • 使用十进制class