sql >> Databáze >  >> RDS >> Mysql

Python Pandas zapisují do SQL s hodnotami NaN

Aktualizovat :počínaje pandas 0.15, to_sql podporuje zápis NaN hodnoty (budou zapsány jako NULL v databázi), takže řešení popsané níže by již nemělo být potřeba (viz https:// github.com/pydata/pandas/pull/8208 ).
Pandy 0.15 budou vydány v říjnu a tato funkce je začleněna do vývojové verze.

To je pravděpodobně způsobeno NaN hodnoty ve vaší tabulce, a to je v tuto chvíli známý nedostatek, že funkce pandas sql špatně zpracovávají NaN (https://github.com/pydata/pandas/issues/2754 , https://github.com/pydata/pandas/issues/4199 )

Jako řešení v tuto chvíli (pro pandy verze 0.14.1 a nižší) můžete ručně převést nan hodnoty na Žádný s:

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

a poté zapište dataframe do sql. To však převede všechny sloupce na objekt dtype. Z tohoto důvodu musíte vytvořit databázovou tabulku na základě původního datového rámce. Např. pokud váš první řádek neobsahuje NaN s:

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


  1. Přístup odepřen pro MYSQL ERROR 1045

  2. Získejte druhou nejvyšší hodnotu v tabulce MySQL

  3. Trasování PostgreSQL pomocí perf

  4. Jak používat REGEXP s escape sekvencemi, jako je hranice slova?