【问题标题】:Python df to database float numbers unexpectedly roundedPython df 到数据库浮点数意外四舍五入
【发布时间】:2021-03-20 00:41:46
【问题描述】:

我有包含 26 列的数据框。列类型为 float64、int64、datetime 和 object。我将此df插入数据库。但是,正如我在数据库中看到的那样,float64 列意外地四舍五入。

'''

    query = config['query']['insert_output_query']  
    #query = insert into schema.table values(:1,:2,:3,...,:25,:26)
    db_cursor.executemany(query, df.values.tolist())
    db_connection.commit()

'''

我已成功将 df 插入数据库,但我如何处理意外舍入问题。

谢谢。

【问题讨论】:

  • 你能分享一些在 df 和 db 中的样本数据吗?以及 db 中的列数据类型。
  • 当然,df.column 中的样本 --> 0, 0.85, 0.818, 0.125, 0.667, 1,同一列似乎只有 0 和 1
  • 如果数据库中的数据类型不是INT,那么也许数字部分和小数部分应该用逗号而不是点分隔。 SELECT TO_CHAR( '0.8512' ,'fm999G999G990D00','NLS_NUMERIC_CHARACTERS = '',.''') FROM dual 可能会有所帮助。
  • 抱歉回复晚了,首先感谢您的关注。我试过你的建议,但没有奏效。 db 列中仍然只有 1 和 0。当我尝试查询您的查询时,0 s 和 1 s 似乎是 0.00 和 1.00 - 在数据框中我将此列从 float 转换为 str 并将 db 列从 float 转换为 varchar(50),但是 db 列仍然保留整个值为 0.0
  • 我发现了问题。我将表格列创建为浮点数,但据我所知,如果我不分配位数,浮点类型的列将保留 1 位。但是当我将列类型指定为 float(64) 时,它会保留小数部分和小数部分。

标签: python sql pandas oracle cx-oracle


【解决方案1】:

我发现了问题。我将表格列创建为浮点数,但据我所知,如果我不分配位数,浮点类型的列将保留 1 位数字。但是当我将列类型分配为 float(64) 时,它会保留小数部分和小数部分。

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多