Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Python-Pandas schreiben mit NaN-Werten in SQL

Aktualisieren :Beginnend mit Pandas 0.15, to_sql unterstützt das Schreiben von NaN Werte (sie werden als NULL geschrieben in der Datenbank), sodass der unten beschriebene Workaround nicht mehr benötigt werden sollte (siehe https:// github.com/pydata/pandas/pull/8208 ).
Pandas 0.15 wird im kommenden Oktober veröffentlicht und die Funktion wird in die Entwicklungsversion integriert.

Das liegt wahrscheinlich an NaN Werte in Ihrer Tabelle, und dies ist im Moment ein bekanntes Manko, dass die Pandas-SQL-Funktionen NaNs nicht gut verarbeiten (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Als Problemumgehung können Sie derzeit (für Pandas-Versionen 0.14.1 und niedriger) den nan manuell konvertieren Werte auf None mit:

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

und schreiben Sie dann den Datenrahmen in SQL. Dies konvertiert jedoch alle Spalten in Objekt-dtype. Aus diesem Grund müssen Sie die Datenbanktabelle basierend auf dem ursprünglichen Datenrahmen erstellen. ZB wenn Ihre erste Zeile NaN nicht enthält s:

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