来自SQLITE3的标准偏差Python代码

来自SQLITE3的标准偏差Python代码,python,sqlite,Python,Sqlite,我试图从SQLITE3dB中找出年龄的标准偏差。但是,我得到了当前的错误: 平均值=sumrow[0]/lenrow[0] TypeError:“int”对象不可编辑 如何更正此问题?代码中的一些快速注释 from math import * import sqlite3 ages=sqlite3.connect('person.sqlite3') def main(): ageslist=ages.execute("SELECT age from person") #average

我试图从SQLITE3dB中找出年龄的标准偏差。但是,我得到了当前的错误: 平均值=sumrow[0]/lenrow[0] TypeError:“int”对象不可编辑


如何更正此问题?

代码中的一些快速注释

from math import *
import sqlite3
ages=sqlite3.connect('person.sqlite3')

def main():
    ageslist=ages.execute("SELECT age from person")
#average age
    for row in ageslist:
        row[0]
    average = (sum(row[0]))/len(row[0])
#subtracts average x from x or opposite and square, depending on n    
    for n in range(len(ageslist) - 1):
        if numbers[n] > average:
            numbers.append((ageslist[n] - average)**2)
        if numbers[n] < average:
            numbers.append((average - ageslist[n])**2)
#takes square rt of the sum of all these numbers and divides by n-1
    Stdv = math.sqrt(sum(ageslist))/(len(ageslist)-1)
    end=time()
    print(Stdv)

main()
执行ageslist=ages.execute时,从person中选择年龄 您的ageslist变量现在是一个iterable对象。在遍历它之后,如果不再次执行database命令,就不能再引用其中的值


因此,我认为您应该有一个变量,用于对for循环中每行迭代期间的时间进行求和,还有一个变量用于记录数据库中的条目数。这也可以在for循环中完成。尽管我确信有一种更为通灵的方法来实现这一点

发送到数据库连接的查询返回一个迭代器。在从内存中刷新迭代器之前,只能对其进行一次遍历。下面是对代码的一些更正,以满足您的要求

for row in ageslist:
    row[0]  # This statement does nothing
average = (sum(row[0]))/len(row[0]) # This statement will not have a row value to reference because your rows in ageslist will have been iterated through

谢谢你在数学计算方面的帮助!这使得事情变得简单多了。这些更改现在给了我一个错误TypeError:计算平均值时不支持+:'int'和'str'的操作数类型。非常欢迎。如果你觉得问题是这样的,请把它标记为已回答。
conn = sqlite3.connect('person.sqlite3')

def main():
    ages_iterator = conn.execute("SELECT age from person")
    # this turns the iterator into an actual list, which you need for stdev
    age_list = [a[0] for a in ages_iterator]

    # average age
    average = (sum(age_list))/len(age_list)

    # subtracts average x from x square
    # because you are squaring the difference, the it does not matter if it is
    # greater or less than the average
    numbers = [(age-average)**2 for age in age_list]

    #takes square rt of the sum of all these numbers and divides by n-1
    Stdv = math.sqrt(sum(numbers))/float(len(numbers)-1)
    end=time()
    print(Stdv)

main()