我试图有效地将一些遗留DB内容读入一个numpy(rec-)数组。我正在关注此What's the most efficient way to convert a MySQL result set to a NumPy array?和此MySQLdb query to Numpy array个帖子。 现在,DB中的某些条目包含NULL,它们将返回为None。
所以np.fromiter会像这样做出反应,例如
TypeError: long() argument must be a string or a number, not 'NoneType'
我想问一下,如果它遇到None,它应该如何表现。 这甚至可能吗?
这是(类似的)我的代码:
cur = db.cursor()
query = ("SELECT a, b, c from Table;")
cur.execute(query)
dt = np.dtype([
('a', int),
('b', int),
('c', float),
])
r = np.fromiter(cur.fetchall(), count=-1, dtype=dt)
我希望能够指定,结果数组应该包含np.nan,以防在列' c'中遇到None,而当找到None时,它应该包含数字9999专栏' a'或者' b'。有可能吗?
或者是否有另一种(漂亮的)方法将MySQL DB内容转换为numpy数组,以防某些值未知?
答案 0 :(得分:2)
我会非常犹豫地建议这是做到这一点的最佳方法,但np.rec.fromrecords
过去对我来说效果很好。
当fix_duplicate_field_names
返回多个具有相同名称的列(它只是捏造新名称)时,numpy
函数可确保MySQL
不会出现问题。
在get_output
函数中,从游标中解析出一些信息以获取rec数组的字段名称,之后numpy
可以决定{{1}的数据类型数据。
MySQL