Postgres помещает NaN в нулевые значения - PullRequest
0 голосов
/ 21 января 2020

Я использую psycopg2 для python сценария

Сценарий анализирует json файлов и помещает их в Postgres RDS.

Когда значение отсутствует в файле json сценарий должен пропустить указанный столбец c

(поэтому он должен инертировать значение null в таблице, но вместо этого поместить NaN)

Кто-нибудь сталкивался с этой проблемой?

Часть, которая проверяет, является ли столбец пустым -

if (str(df.loc[0][col]) == "" or df.loc[0][col] is None or str(df.loc[0][col]) == 'None' or str(df.loc[0][col]) == 'NaN' or str(df.loc[0][col]) == 'null'):
    df.drop(col, axis=1, inplace=True)
else:
    cur.execute("call mrr.add_column_to_table('{0}', '{1}');".format(table_name, col))

Часть вставки -

def copy_df_to_sql(df, conn, table_name):
    if len(df) > 0:
        df_columns = list(df)
        columns = '","'.join(df_columns)  # create (col1,col2,...)
        # create VALUES('%s', '%s",...) one '%s' per column
        values = "VALUES({})".format(",".join(["%s" for _ in df_columns]))
        # create INSERT INTO table (columns) VALUES('%s',...)
        emp = '"'
        insert_stmt = 'INSERT INTO mrr.{} ({}{}{}) {}'.format(table_name, emp, columns, emp, values)
        cur = conn.cursor()
        import psycopg2.extras
        psycopg2.extras.execute_batch(cur, insert_stmt, df.values)
        conn.commit()
        cur.close()

1 Ответ

0 голосов
/ 21 января 2020

Хорошо, поэтому причина этого, вероятно, в том, что pandas обрабатывает null значения как NaN,

, поэтому, когда я вставляю Dataframe в таблицу, вставляются значения null как pandas ноль, что NaN

...