Pandas read_sql_query读取超过6位浮点数转int丢失小数问题求助
故障排查及解决方法
- 首先修正SQL语句的语法错误:你写的CAST查询两个字段之间缺少逗号,会导致SQL执行异常,返回的字段不符合预期。首先修正语法,同时建议优先使用DECIMAL而非FLOAT做类型转换,避免浮点精度损失:
import pandas as pd import numpy as np sql = """ SELECT CAST(Voucher AS DECIMAL(18, 2)) AS Voucher, CAST(Payed AS DECIMAL(18, 2)) AS Payed FROM Database1 """ df = pd.read_sql_query(sql, conn)
- 如果上述方案无效,说明是数据库驱动的默认转换逻辑提前截断了小数部分,此时可以先将字段以字符串形式读出,再手动转换为浮点类型:
sql = """ SELECT CAST(Voucher AS CHAR) AS Voucher, CAST(Payed AS CHAR) AS Payed FROM Database1 """ df = pd.read_sql_query(sql, conn) df[['Voucher', 'Payed']] = df[['Voucher', 'Payed']].astype(np.float64)
- 额外检查点:如果打印全表时看不到小数,但取单个单元格数值时有小数,说明是pandas的显示配置问题,修改显示参数即可:
pd.set_option('display.float_format', lambda x: '%.2f' % x)
- 注意使用
dtype参数前需确保已经正确导入numpy库,否则参数指定不生效。
内容的提问来源于stack exchange,提问作者pythonrookie
相关产品推荐
相关产品推荐

