将数据附加到numpy数组中

时间:2017-05-17 11:16:31

标签: python arrays numpy

我试图在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的错误以及我传递给它的数据类型。

3 个答案:

答案 0 :(得分:0)

数组A保存浮点数(如您所指定),客户持有字符串。您不能将字符串添加到浮点数组。你应该这样做:A = np.append(A,float(birth_date))

答案 1 :(得分:0)

在for循环后,执行以下操作:

A = A.astype(np.float)

你的csv阅读器将值作为字符串读取并转储到numpy数组中。即使你已经声明了一个浮点数组,但值是导致问题的字符串。

答案 2 :(得分:0)

进一步研究后,我的列表中有空行。 为了解决问题,我控制了行的值,如果!=''那么我已经将值添加到numpy数组中,现在它可以正常工作

import csv
import numpy as np

f = open("training_set.csv", 'r')
customers = csv.reader(f)
header = next(customers)


A = np.array([]).astype(np.int)

for row in customers:
    birth_date = row[10].split("-")[0]
    if birth_date != '':
        A = np.append(A,float(birth_date))
print np.var(A)