MySQLdb查询包含Numpy数组的NULL

时间:2014-09-23 14:05:57

标签: python mysql numpy

我试图有效地将一些遗留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数组,以防某些值未知?

1 个答案:

答案 0 :(得分:2)

我会非常犹豫地建议这是做到这一点的最佳方法,但np.rec.fromrecords过去对我来说效果很好。

fix_duplicate_field_names返回多个具有相同名称的列(它只是捏造新名称)时,numpy函数可确保MySQL不会出现问题。

get_output函数中,从游标中解析出一些信息以获取rec数组的字段名称,之后numpy可以决定{{1}的数据类型数据。

MySQL