如何使用pandas正确地将NULL时间戳插入postgres

时间:2014-12-09 17:06:17

标签: python postgresql pandas sqlalchemy

我正在使用pandassqlalchemy使用pandas to_sql方法将数据插入postgresql。但是,当数据在日期列中有一些缺失值(NULL)时,我遇到了DataError。

import pandas as pn
import sqlalchemy

data = pn.DataFrame({"someint":[1,2,3,4,5], "dates":pn.date_range('1/1/2014', periods=5)})
data.loc[2, "dates"] = None

engine = sqlalchemy.create_engine("postgresql://user:password@localhost/postgres")
data.to_sql("test", engine, if_exists="append")

这是我遇到的错误:

DataError: (DataError) invalid input syntax for type timestamp: "0001-255-255T00:00:00"
LINE 1: ...SERT INTO test (index, dates, someint) VALUES (2, '0001-255-...

如果我将日期列更改为str并将NaT值映射为无(在转换时它们会转换为字符串'NaT'),那么我可以调用to_sql并且一切正常

data.dates = data.dates.map(str)
data.dates = data.dates.map(lambda x: x if x != 'NaT' else None)

data.to_sql("test", engine, if_exists="append")

然而,这种“解决方案”感觉是黑暗和不洁净。此外,如果表不存在,则日期列将创建为varchar,而不是时间戳。

有更好的方法吗?

0 个答案:

没有答案