【发布时间】:2017-05-17 11:16:31
【问题描述】:
我正在尝试在一个 numpy 数组中传递一个列表,以便按照 here 的解释计算其方差
我使用的例子是这样的:
import numpy as np
A= np.array([])
newrow = [1,2,3]
A = np.concatenate((A,newrow))
print(np.var(A))
上面的例子有效,但是我不能将它应用到我的具体案例中(见下文)
import csv
import numpy as np
f = open("training_stats.csv", 'r')
customers = csv.reader(f)
header = next(customers)
#I've tried with and without the .astype
A = np.array([]).astype(np.float)
for row in customers:
birth_date = row[10].split("-")[0]
print(birth_date)
A = np.append(A,birth_date)
print np.var(A)
这是返回的错误信息
TypeError: cannot perform reduce with flexible type
这是我的列表的样子:
1963
1975
1957
我知道我可以这样计算方差:
var = mean(abs(x - x.mean())**2)
但是我想了解这个 numpy.array 有什么问题以及我传递给它的数据类型。
【问题讨论】:
-
你的生日是一个字符串。 Numpy 可能在内部做一个不处理对象数据类型的 reduce。在你的 for 循环之后执行 astype 并查看错误是否仍然存在。
-
@Satyadev 如果我尝试 'A = np.append(A,birth_date).astype(np.int)' 我得到这个 'ValueError: invalid literal for int() with base 10: '' '
-
您能否提供一个(缩短的)文件样本?可能有一种更简单的方法来提取数据。 :)
-
我建议将
pandas用于此类任务。它不仅有一个不错的read_csv模块。它还自动处理不同列中的不同数据类型。