我正在使用pandas
和sqlalchemy
使用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,而不是时间戳。
有更好的方法吗?