python - 将 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__
如何根据上述要求格式化系列中的字符串并获得正确的浮点数?
解决方案
经过几次迭代,我想我理解了 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}")
推荐阅读
- typescript - 来自 reactive() 的 Vue3/Vuex 对象一旦在突变中作为有效负载传递给 vuex,就会失去反应性
- server - 在一个 URL 下提供移动和桌面应用程序
- powerbi - 使用 Get-PowerBIActivityEvent 时 Azure Runbook 仍然返回错误
- linux - Windows Jenkins 连接 Linux 虚拟机
- java - Android Studio:如何添加“.a”库?
- reactjs - 如何使用 justify-between Tailwind?
- angular - 如何使 Angular 显示来自 api 响应的错误消息
- mean - 具有分面网格的 geom_bar 的平均函数
- python - 如何在仪表板上显示/隐藏 dash-cytoscape 对象?
- javascript - 从集线器调用客户端功能在初始连接上不起作用