sql >> Database teknologi >  >> RDS >> Mysql

Python Pandas skriver til sql med NaN-værdier

Opdater :starter med pandas 0.15, to_sql understøtter skrivning af NaN værdier (de vil blive skrevet som NULL i databasen), så løsningen beskrevet nedenfor burde ikke være nødvendig længere (se https:// github.com/pydata/pandas/pull/8208 ).
Pandas 0.15 frigives i næste oktober, og funktionen er fusioneret i udviklingsversionen.

Dette skyldes sandsynligvis NaN værdier i din tabel, og det er en kendt mangel i øjeblikket, at pandas sql-funktionerne ikke håndterer NaN'er godt (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Som en løsning i øjeblikket (for pandaer version 0.14.1 og lavere), kan du manuelt konvertere nan værdier til Ingen med:

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

og skriv derefter datarammen til sql. Dette konverterer dog alle kolonner til objekt dtype. På grund af dette skal du oprette databasetabellen baseret på den originale dataramme. F.eks. hvis din første række ikke indeholder NaN s:

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


  1. Deaktiver sikker priv for dataindlæsning på MySQL

  2. Transponer et sæt rækker som kolonner i SQL Server 2000

  3. mysqladmin:opret forbindelse til serveren på 'localhost' mislykkedes

  4. Django og mysql problemer på Mavericks