Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Python Pandas grava em sql com valores NaN


Atualizar :começando com pandas 0.15, to_sql suporta escrever NaN valores (eles serão escritos como NULL no banco de dados), portanto, a solução alternativa descrita abaixo não deve mais ser necessária (consulte https:// github.com/pydata/pandas/pull/8208 ).
O Pandas 0.15 será lançado em outubro próximo, e o recurso é mesclado na versão de desenvolvimento.

Isso provavelmente se deve a NaN valores em sua tabela, e isso é uma falha conhecida no momento em que as funções sql do pandas não lidam bem com NaNs (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Como solução alternativa neste momento (para pandas versões 0.14.1 e inferiores), você pode converter manualmente o nan valores para Nenhum com:
df2 = df.astype(object).where(pd.notnull(df), None)

e, em seguida, escreva o dataframe no sql. No entanto, isso converte todas as colunas em objeto dtype. Por isso, você precisa criar a tabela de banco de dados com base no dataframe original. Por exemplo, se sua primeira linha não contém NaN s:
df[:1].to_sql('table_name', con)
df2[1:].to_sql('table_name', con, if_exists='append')