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

Python psycopg2在postgresql表的某些行中插入NULL,python,python-3.x,postgresql,amazon-redshift,psycopg2,Python,Python 3.x,Postgresql,Amazon Redshift,Psycopg2,我有一个Python数据框,在某些行中有空值,当插入到postgresql时,datetype列中的一些空值会变成'NaT'字符串或'NaN',我希望它是一个真正的空值,在该单元格中没有任何内容 插入前的数据帧示例 生成postgresql表 预期结果如下 您可以通过以下方式将NaN转换为None: df= pd.DataFrame({ 'zipcode':[1,np.nan,22,88], 'city':['A','h','B',np.nan], 'date':['

我有一个Python数据框,在某些行中有空值,当插入到postgresql时,datetype列中的一些空值会变成'NaT'字符串或'NaN',我希望它是一个真正的空值,在该单元格中没有任何内容

插入前的数据帧示例

生成postgresql表

预期结果如下


您可以通过以下方式将
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)

请参见您可以通过以下方式将
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)

请参见

将数据帧中的所有NaN实例替换为None,如下所示:

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

通过替换为None来转换数据帧中NaN的所有实例,如下所示:

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

糟糕的是,我的实际表包含一个datetype列,其中有一些NaT,df.where((pd.notnull(df)),None)不能转换natinded,它不能与
NaT
一起工作(我认为应该)。我在特定列中添加了从
NaT
到None的转换,请参见更新后的答案。顺便问一下,如果我有一百万行要插入,您知道如何加快转换过程吗?大容量插入?你有文件中的数据吗?它在pandas dataframe中,我可以将它保存为csv。糟糕,我的实际表包含一个datetype列,其中有一些NaT,df。其中((pd.notnull(df)),None)不能转换Natinded,它不能与
NaT
(我认为应该)。我在特定列中添加了从
NaT
到None的转换,请参见更新后的答案。顺便问一下,如果我有一百万行要插入,您知道如何加快转换过程吗?大容量插入?你有文件中的数据吗?它在pandas dataframe中,我可以将其保存为csv。如果你这样做,postgres db中将不会有“None”。OP希望数据库中有[null]如果这样做,那么postgres数据库中将没有。OP希望数据库中有[null]