cx_Oracle.DatabaseError: DPI-1043

向Oracle写数据时出现cx_Oracle.DatabaseError: DPI-1043:invalid number

这个问题居然百度不到,是出现得很少吗

在做项目中需要向Oracle写入这样一个数据,400w条

cx_Oracle.DatabaseError: DPI-1043_第1张图片
但是在写入时出现1043错误,检查过所有列和类型和数据库中的表类型是对应的。找了半天在 stack overflow 一个外国老大哥出现了同样的问题,他的原因是

数据中有NaN

但我的并不是,我查找并没有找到有NaN值,以防万一,用pd.fillna()填充了,异常还是存在。
最终是对每一列重新赋值,再写入来确定问题所在,锁定在finishedRate这一列。
把元数据to_numeric再写入,成功了。

pd2ss['finishedRate'] = pd.to_numeric(pd2ss['finishedRate'])

数据中有inf或-inf

上次侥幸使用pd.to_numeric()成功写入,这次又遇到这个问题,准备依葫芦画瓢时,发现不管用了。没有办法,只能去定位异常发生的数据点,最后通过二分法对400W条数据定位到数据异常的位置。
cx_Oracle.DatabaseError: DPI-1043_第2张图片
解决方法:

import numpy as np
pd2sss = pd2sss.copy()
pd2sss.replace(-np.inf,0,inplace=True)
pd2sss.replace(np.inf,0,inplace=True)

替换之后就可以顺滑写入啦:
cx_Oracle.DatabaseError: DPI-1043_第3张图片

你可能感兴趣的:(工具)