sql >> Database >  >> RDS >> Mysql

Python Panda's schrijven naar sql met NaN-waarden

Bijwerken :beginnend met panda's 0.15, to_sql ondersteunt het schrijven van NaN waarden (ze worden geschreven als NULL in de database), dus de hieronder beschreven tijdelijke oplossing zou niet meer nodig moeten zijn (zie https:// github.com/pydata/pandas/pull/8208 ).
Pandas 0.15 wordt in oktober uitgebracht en de functie is samengevoegd in de ontwikkelingsversie.

Dit komt waarschijnlijk door NaN waarden in uw tabel, en dit is een bekende tekortkoming op het moment dat de panda's sql-functies NaN's niet goed verwerken (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Als tijdelijke oplossing (voor panda's versie 0.14.1 en lager), kun je de nan handmatig converteren waarden op Geen met:

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

en schrijf vervolgens het dataframe naar sql. Dit converteert echter alle kolommen naar object dtype. Daarom moet u de databasetabel maken op basis van het originele dataframe. Bijvoorbeeld als uw eerste rij geen NaN . bevat s:

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


  1. Hoe de tabelnaam in een dynamische SQL-query in te stellen?

  2. Tabeltype in Oracle PL SQL Voorbeeld

  3. Proactieve SQL Server Health Checks, Deel 2:Onderhoud

  4. Git Branching-naamgevingsconventie:best practices