来自SQLITE3的标准偏差Python代码
我试图从SQLITE3dB中找出年龄的标准偏差。但是,我得到了当前的错误: 平均值=sumrow[0]/lenrow[0] TypeError:“int”对象不可编辑来自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
如何更正此问题?代码中的一些快速注释
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()