在转换为 numpy 重新数组时处理 None 值
在使用对 np.rec.fromrecords 的单次调用将元组列表转换为 numpy 记录数组时,是否有一种优雅的方式来处理 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')
我猜我必须在每个字段的基础上执行此操作,以便避免在重新数组中的其他地方丢失真正的类型错误。有没有什么方法可以隔离我希望应用此转换的记录中的位置(即哪些字段)。我的真实用例是将 pyodbc 记录转换为 numpy 记录。
Is there a graceful way of handling None values in a conversion of a list of tuples to a numpy recarray using the single call to np.rec.fromrecords? Assuming I know what I want the missing value to be (e.g. -1 for integers), how do I catch and handle the below contrived example:
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')
I'm guessing that I would have to do this on a per-field basis in order to avoid missing true TypeErrors elsewhere in the recarray. Is there any way of isolating where (ie. what fields) in the recarray I want this conversion to apply. My real use case is converting pyodbc records to numpy recarrays.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用数据库查询为 NULL 列值返回 -1,如下所示:
这将为 NULL 的 ColumnName 值返回 -1,否则返回实际值。如果需要,可在此处获取 COALESCE 文档。这允许您仅为所需的列提供 NULL 替换值,并且不会屏蔽您应该关心的
TypeError
异常。Return -1 for the NULL column values using the database query, something like this:
This will return -1 for ColumnName values that are NULL, otherwise the actual value is returned. Documentation for COALESCE here if needed. This allows you to provide a NULL replacement value only for the columns you require, and will not mask
TypeError
exceptions that you should care about.