我有一个 Pandas 数据框,正在将其插入到 SQL 数据库中。我直接使用 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 是它自己的类型,而实际上它是一个浮点数。下面的代码,由 psycopg2 邮件列表上的 Daniele Varrazzo 提供 http://www.postgresql.org/message-id/CA+mi_8bNJfYZJ=5sw5PgL0s09DEVNRop1j2J8b_fFtzm-88H4g@mail.gmail.com,正确完成工作。
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)