0

我正在尝试从我的数据库中提取一列,应用转换,并使用结果创建一个新列。

我最终想将局部变量“new_proba”(长度为 740,与我的数据库长度相同)保存为一个名为“predict_proba_tplus1”的新列。通过阅读这个线程,我了解到 UPDATE 函数需要一个元组。

我创建了一个与数据库中的 indexID 列匹配的“ID”列表,然后使用“new_proba”对其进行压缩以创建输出“(0.56298709097028454, 0)、(0.54392926856501334, 1)等的元组。

下面的函数实际上并没有引发任何错误,但它只创建列“predict_proba_tplus1”并且没有填写我希望 c.executemany() 执行的任何值 - 我留下了一个新的列具有 NULL 值。这让我觉得 WHERE 语句有问题 - 即,尽管数字相同,但由于某种原因它没有将 indexID 列与 IDs 变量匹配。

任何见解将不胜感激。

def update_class_proba(path):
    conn = sqlite3.connect(path)
    c = conn.cursor()
    cursor = c.execute('SELECT text, indexID FROM reuters_test_X')
    all_rows = cursor.fetchall()
    X = vect.transform(x[0] for x in all_rows)
    new_proba = list(clf.predict_proba(X)[:,1])
    IDs = list(np.arange(0, 740, 1))
    new_proba_tuple = list(zip(new_proba,IDs))
    c.execute('ALTER TABLE reuters_test_X ADD COLUMN predict_proba_tplus1 REAL')
    c.executemany('UPDATE reuters_test_X SET predict_proba_tplus1=? WHERE indexID=?', new_proba_tuple)
    conn.commit()
    conn.close()
4

1 回答 1

0

这些价值观并不简单float;它们是numpy.float64数据库无法处理的。

将您的值转换为普通值floatint如下所示:

new_proba = list(float(z) for z in clf.predict_proba(X)[:,1])
IDs = list(int(zz) for zz in np.arange(0, 740, 1))
于 2016-09-20T15:26:48.500 回答