【发布时间】: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