簡體   English   中英

Python psycopg2在postgresql表的某些行中插入NULL

[英]Python psycopg2 insert NULL in some rows in postgresql table

我在某些行中有一個帶有NULL值的Python數據幀,在插入postgresql時,datetype列中的某些null變為'NaT'字符串或'NaN',我喜歡它是一個真正的NULL,在該單元格中沒有任何內容。

插入前的示例數據幀

在此輸入圖像描述

import psycopg2
import pandas as pd
import numpy as np

conn=psycopg2.connect(dbname= 'myDB', host='amazonaws.com', 
port= '2222', user= 'mysuser', password= 'mypass')
cur = conn.cursor()

df= pd.DataFrame({ 'zipcode':[1,np.nan,22,88],'city':['A','h','B',np.nan]})


subset = df[['zipcode', 'city']]
data = [tuple(x) for x in subset.values]
records_list_template = ','.join(['%s'] * len(data)) 
insert_query = 'insert into public.MyTable (zipcode, city) values {}'.format(records_list_template)
cur.execute(insert_query, data)
conn.commit()

導致postgresql表

在此輸入圖像描述

預期結果如下

在此輸入圖像描述

通過替換為None來轉換數據框中的所有NaN實例,如下所示:

df = df.replace({pd.np.nan: None})

您可以通過以下方式將NaN轉換為None

df= pd.DataFrame({
    'zipcode':[1,np.nan,22,88],
    'city':['A','h','B',np.nan],
    'date':['2019-01-01','2019-01-02',pd.NaT,pd.NaT]})

df['date'] = [d.strftime('%Y-%m-%d') if not pd.isnull(d) else None for d in df['date']]

subset = df.where((pd.notnull(df)), None)

請參見DataFrame.where

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM