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')