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
由于某种原因,最后一条记录被修改了。
您遇到的修改十进制精度的问题是由于 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)
这可确保您保持精度而不会出现浮点错误。