在Python中将NaN转换为Oracle空值
我在执行下面的函数时遇到这个错误&这是因为尝试将NaN插入到数值列中。在整个过程中将NaN替换为0会起作用,但将NaN替换为None不会起作用。如有任何意见,将不胜感激在Python中将NaN转换为Oracle空值,python,pandas,sqlalchemy,null,sql-insert,Python,Pandas,Sqlalchemy,Null,Sql Insert,我在执行下面的函数时遇到这个错误&这是因为尝试将NaN插入到数值列中。在整个过程中将NaN替换为0会起作用,但将NaN替换为None不会起作用。如有任何意见,将不胜感激 def insertData(table_name, schema_name, df): if not df.empty: #input_data[file].fillna(0, inplace=True) # This works but replacing with 0's is not ideal
def insertData(table_name, schema_name, df):
if not df.empty:
#input_data[file].fillna(0, inplace=True) # This works but replacing with 0's is not ideal
df.where(pd.notnull(df), None) #This does not work
values = df.to_dict(orient='records')
table = sa.Table(table_name , conndict['meta'], autoload=True, schema=schema_name)
result_proxy = conndict['conn'].execute(table.insert(), values)
return result_proxy
else:
return None
(cx_Oracle.DatabaseError)DPI-1055:值不是数字(NaN),不能用于Oracle数字中
好吧,熊猫有它自己漂亮的方法,可以自动处理
NaN
-->NULL
转换:
df.to_sql('tab_name', sql_alchemy_conn, if_exists='append', index=False)
PS如果DF有字符串(
object
)列,请使用dtype
parameter()BtwDF.where(pd.notnull(DF),None)
和替换项,因此该行是一个无操作。使用inplace=True
操作将在适当的位置进行,但这会将dtype
更改为object。感谢Max。我以前使用过sql,但后来由于性能问题不得不从SQLAlchemy切换到CORE insert。我们甚至尝试了一段时间将/searchin选项调整为_sql,但没有转换。@varunkhana,你在使用什么样的数据库?我正在连接到OracleDB@VarunKhanna,您是否检查了链接的答案?它解决了字符串列在Oracle端转换为CLOB时的问题,这会导致巨大的性能问题…是的。我检查了CLOB没有被存储。表上的描述显示字符串被存储为字符串