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

Python Pandas scrive in sql con valori NaN

Aggiorna :a partire da panda 0.15, to_sql supporta la scrittura di NaN valori (saranno scritti come NULL nel database), quindi la soluzione alternativa descritta di seguito non dovrebbe più essere necessaria (vedi https:// github.com/pydata/pandas/pull/8208 ).
Pandas 0.15 verrà rilasciato il prossimo ottobre e la funzionalità verrà incorporata nella versione di sviluppo.

Ciò è probabilmente dovuto a NaN valori nella tua tabella, e questa è una lacuna nota al momento che le funzioni di panda sql non gestiscono bene i NaN (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Come soluzione alternativa in questo momento (per le versioni panda 0.14.1 e precedenti), puoi convertire manualmente il nan valori su Nessuno con:

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

e quindi scrivi il dataframe in sql. Questo tuttavia converte tutte le colonne in oggetto dtype. Per questo motivo, è necessario creare la tabella del database in base al dataframe originale. Ad esempio, se la tua prima riga non contiene NaN s:

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