下面的代码可以很好地将多维numpy数组插入到表中
def adapt_numpy_array(numpy_array):
return AsIs(numpy_array.tolist())
register_adapter(np.ndarray, adapt_numpy_array)
register_adapter(np.int32, AsIs)
register_adapter(np.int64, AsIs)
register_adapter(np.float64, AsIs)
字符串
但是,如果数组包含NaN,则会中断:
psycopg2.errors.UndefinedColumn:FEHLER:Spalte »nan«未定义行2:.6000.0,692000.0,732000.0,830000.0,928000.0],[nan,nan,..
将适配器更改为
def adapt_numpy_array(numpy_array):
return numpy_array.tolist()
def nan_to_null(f,
_NULL=psycopg2.extensions.AsIs('NULL'),
_Float=psycopg2.extensions.Float):
if not np.isnan(f):
return _Float
return _NULL
register_adapter(float, nan_to_null)
型
产生另一个错误
AttributeError:'list'对象没有属性'getquoted'
为什么第二个代码中断,psycopg2应该遍历列表并将每个浮点数替换为它的值或NULL?如何在存在NaN的情况下将numpy数组插入SQL表?
1条答案
按热度按时间gopyfrb31#
技巧是将numpy数组转换为字符串,并通过
NULL
正确表示NaN值。格式化的字符串然后可以由AsIs
适配器 Package 。字符串
不确定这是否是最优雅的解决方案,但它确实可以处理我抛出的任何numpy数组。