Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将NaN转换为Oracle空值_Python_Pandas_Sqlalchemy_Null_Sql Insert - Fatal编程技术网

在Python中将NaN转换为Oracle空值

在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

我在执行下面的函数时遇到这个错误&这是因为尝试将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
        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()

Btw
DF.where(pd.notnull(DF),None)
和替换项,因此该行是一个无操作。使用
inplace=True
操作将在适当的位置进行,但这会将
dtype
更改为object。感谢Max。我以前使用过sql,但后来由于性能问题不得不从SQLAlchemy切换到CORE insert。我们甚至尝试了一段时间将/searchin选项调整为_sql,但没有转换。@varunkhana,你在使用什么样的数据库?我正在连接到OracleDB@VarunKhanna,您是否检查了链接的答案?它解决了字符串列在Oracle端转换为CLOB时的问题,这会导致巨大的性能问题…是的。我检查了CLOB没有被存储。表上的描述显示字符串被存储为字符串