处理转换为numpy recarray中的None值

1 投票
1 回答
646 浏览
提问于 2025-04-16 23:38

有没有一种优雅的方法来处理在将一系列元组转换为numpy的recarray时出现的None值?假设我已经知道缺失值应该是什么(比如说,整数的缺失值是-1),那么我该如何处理下面这个人为的例子呢:

import numpy as np
a = [('Bob', 40, 3.14), ('Sue', 38, 6.28), ('Jim', None, 9.42)]
dtype = [('NAME', 'S10'), ('AGE', np.int32), ('SCORE', np.float64)]
try:
    b = np.rec.fromrecords(a, dtype=dtype)
except TypeError:
    # Convert None to 0 for AGE field here instead of raising the error
    raise TypeError('Caught a TypeError')

我猜我需要逐个字段来处理这些值,以避免在recarray中出现真正的类型错误。有没有办法让我指定在recarray中哪些字段需要进行这种转换?我实际的应用场景是将pyodbc记录转换为numpy的recarrays。

1 个回答

1

使用数据库查询,当某一列的值为NULL时返回-1,类似这样:

SELECT COALESCE(ColumnName, -1) FROM Schema.Table;

这样做会让ColumnName列中值为NULL的地方返回-1,其他情况下则返回实际的值。如果需要,可以查看COALESCE的文档,在这里。这样你可以只为需要的列提供一个NULL的替代值,并且不会掩盖你应该关注的TypeError错误。

撰写回答