sql >> Base de Datos >  >> RDS >> Mysql

Python Pandas escribe en sql con valores NaN

Actualizar :comenzando con pandas 0.15, to_sql admite escribir NaN valores (se escribirán como NULL en la base de datos), por lo que la solución que se describe a continuación ya no debería ser necesaria (ver https:// github.com/pydata/pandas/pull/8208 ).
Pandas 0.15 se lanzará el próximo octubre y la función se fusionará en la versión de desarrollo.

Esto probablemente se deba a NaN valores en su tabla, y esta es una deficiencia conocida en el momento en que las funciones pandas sql no manejan bien los NaN (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Como solución en este momento (para pandas versiones 0.14.1 y anteriores), puede convertir manualmente el nan valores a Ninguno con:

df2 = df.astype(object).where(pd.notnull(df), None)

y luego escriba el marco de datos en sql. Sin embargo, esto convierte todas las columnas en tipo de objeto. Debido a esto, debe crear la tabla de la base de datos en función del marco de datos original. Por ejemplo, si su primera fila no contiene NaN s:

df[:1].to_sql('table_name', con)
df2[1:].to_sql('table_name', con, if_exists='append')