Pandas 数据框中的浮点数据类型对于高精度十进制值的行为不一致

问题描述 投票:0回答:1

Pandas 数据框给出了不正确的高精度十进制值。 例如: oracle表中的数据为 45.200000000000003 12.699999999999999 99.745663 oracle中的数据类型是number(28,15)

当我这样做时

dataframe=pandas.read_sql_query('select * from schema.table',connection)
print(df['columnname'])

结果集是 0 45.2 1 12.7 3 99.745663

然后我尝试通过

格式化浮点数据
pandas.set_option('display.precision', 15)

结果变成了 0 45.200000000000003 1 12.699999999999999 3 99.745662999999993

由于某种原因,最后一条记录被修改了。

pandas dataframe decimal precision
1个回答
0
投票

您遇到的修改十进制精度的问题是由于 Python 和 Pandas 中处理浮点数的方式造成的。处理十进制值时,浮点运算可能会导致较小的精度误差。在您的情况下,数字 99.745663 正在稍微调整。

以下是可能的解决方案:

1。使用小数模块可以获得更高的精度: 小数模块 与浮动相比,可以实现更好的精确处理。

from decimal import Decimal
import pandas as pd

df['columnname'] = df['columnname'].apply(Decimal)

2。以字符串形式获取数字并将其转换为十进制:

import pandas as pd
from decimal import Decimal

df = pd.read_sql_query('select TO_CHAR(columnname) from schema.table', connection)
df['columnname'] = df['columnname'].apply(Decimal)

这可确保您保持精度而不会出现浮点错误。

© www.soinside.com 2019 - 2024. All rights reserved.