PandasからPythonで作成された空の値を含む配列を挿入したいのですが、これらの空の値はPandasデータフレームのnp.nanになります。 PostgreSQLデータベースに「NaN」ではないように、私はPostgreSQL配列に空の値、例えば'{123,24,,23}'
を入れておきたいので、指標間の平均値や標準偏差を計算するなどの集計関数ではカウントされません。 PostgreSQLで疎な配列を使用できるかどうかはわかりません。私のデータセットには疎な配列はたくさんありませんが、私はこれをエッジケースの目的でテストしています。PostgreSQL/Pandas null/np.nan/emptyの値を含む疎な配列を挿入
私のテーブルスキーマ:
create_table = '''
CREATE TABLE {t} (
patient_id VARCHAR[20] PRIMARY KEY,
gene_expression double precision []
);
'''
関連するPythonコード(私はここで、適切なSQLコードを作成する方法がわかりません)。
df = df.fillna('')
NCI = [1]
MCI = [2,3]
AD = [4,5]
other = [6]
insert_sql = '''
INSERT INTO {t} (patient_id, gene_expression)
VALUES (%s,%s);
'''
cur = psql_conn.cursor()
for index, row in df.iterrows():
arr = row[2:].tolist()
postgres_arr = ','.join(map(str, arr))
if row['DIAGNOSIS'].isdigit():
if int(row['DIAGNOSIS']) in NCI:
cur.execute(insert_sql.format(t='nci'), (row['PATIENT_ID'], postgres_arr,))
elif int(row['DIAGNOSIS']) in MCI:
cur.execute(insert_sql.format(t='mci'), (row['PATIENT_ID'], postgres_arr,))
elif int(row['DIAGNOSIS']) in AD:
cur.execute(insert_sql.format(t='ad'), (row['PATIENT_ID'], postgres_arr,))
elif int(row['DIAGNOSIS']) in other:
cur.execute(insert_sql.format(t='other'), (row['PATIENT_ID'], postgres_arr,))
elif row['DIAGNOSIS'] == '':
cur.execute(insert_sql.format(t='na'), (row['PATIENT_ID'], postgres_arr,))
else:
print('ERROR: unknown diagnosis {d}.'.format(d=diagnosis))
psql_conn.commit()
cur.close()
マイエラー:
psycopg2.DataError: malformed array literal: "{2.0,2.4,}"
LINE 3: VALUES ('X100_120417','{2.0,2.4,}');
^
DETAIL: Unexpected "}" character.
ありがとう、それはタイプミスでした、どのようにNULLを配列に 'nan'の代わりに挿入しますか? 'nan'の演算はすべて 'nan'になりますが、 'nan'の値は無視したいからです。 – Dobob