sql >> データベース >  >> RDS >> Mysql

PythonPandasはNaN値を使用してSQLに書き込みます

    更新 :パンダ0.15以降、to_sql NaNの記述をサポート 値(NULLとして記述されます データベース内)、したがって、以下で説明する回避策はもう必要ありません( https://を参照してください。 github.com/pydata/pandas/pull/8208 )。
    Pandas 0.15は来たる10月にリリースされ、この機能は開発バージョンに統合されます。

    これはおそらくNaNが原因です テーブル内の値。これは、パンダのSQL関数がNaNを適切に処理しないという現時点での既知の欠点です( https://github.com/pydata/pandas/issues/2754 https://github.com/pydata/pandas/issues/4199

    現時点での回避策として(パンダバージョン0.14.1以下の場合)、nanを手動で変換できます。 値をNoneに変更:

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

    次に、データフレームをSQLに書き込みます。ただし、これによりすべての列がオブジェクトdtypeに変換されます。このため、元のデータフレームに基づいてデータベーステーブルを作成する必要があります。たとえば、最初の行にNaNが含まれていない場合 s:

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


    1. R12.2オンラインパッチ適用サイクルの概要

    2. SQLフィドル出力エラー

    3. PHP/MySQLのマルチレベルメニュー

    4. mySQL:配列へのサブクエリ?