我有一个要插入到 SQL 数据库中的 Pandas 数据框。我直接使用 Psycopg2 与数据库对话,而不是 SQLAlchemy,所以我不能使用 Pandas 内置的 to_sql 函数。几乎一切都按预期工作,除了 numpy np.NaN 值被转换为 NaN 文本并插入到数据库中。它们确实应该被视为 SQL 空值。
所以,我正在尝试创建一个自定义适配器以将 np.NaN 转换为 SQL null,但我尝试过的所有操作都会导致在数据库中插入相同的 NaN 字符串。
我目前正在尝试的代码是:
def adapt_nans(null):
a = adapt(None).getquoted()
return AsIs(a)
register_adapter(np.NaN, adapt_nans)
我已经尝试了很多关于这个主题的变体,但没有任何运气。
最佳答案
我之前尝试的代码失败了,因为它假定 np.Nan 是它自己的类型,而实际上它是一个 float 。以下代码,courtesy of Daniele Varrazzo on the psycopg2 mailing list , 正确完成工作。
def nan_to_null(f,
_NULL=psycopg2.extensions.AsIs('NULL'),
_Float=psycopg2.extensions.Float):
if not np.isnan(f):
return _Float(f)
return _NULL
psycopg2.extensions.register_adapter(float, nan_to_null)
关于python - 如何将 numpy NaN 对象转换为 SQL 空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107558/