我是python的新手并且正在使用函数customer_state
。
我有另一个函数从csv文件中获取数据。我想从该文件中获取一列的总和,并得到sm1
(这给出了时间t(以天为单位)的增长率。
这是我到目前为止所做的:
def del_pass():
reader = csv.DictReader(open("data.csv", "rb"))
all_rows = list()
for row in reader:
all_rows.append(row)
return all rows
def get_one_column(name):
column_list= list()
rows = del_pass()
for row in rows:
value = row(name)
if value =='':
value = 0
else:
value = int(value)
column_list.append(value)
return column_list
def customer_state(x):
sm = sum(x)
t = range(366)
sm1 = sm + (0.07 * (t/365) * sm)
return sm, sm1
def example_use1():
column_name ="totcust"
column = get_one_column(column_name)
column_stats = customer_state(column)
print column_stats
除了customer_state(x)
之外,每个函数似乎都运行良好,这给了我以下错误。
sm1 = (sm + ((0.07/t) * sm))
TypeError: unsupported operand type(s) for /: 'float' and 'list'
答案 0 :(得分:0)
我假设0.07 /范围(366)应该返回0.07的列表除以范围(366)中的相应元素?
在这种情况下,您可以使用列表理解:
sm1 = [sm + ((0.07/t) * sm)) for t in xrange(1,366)]
或者,因为您将numpy-tag应用于问题,所以将t初始化为numpy数组:
t = numpy.mgrid[1:366]
sm1 = sm + (0.07/t) * sm
然后也将使用元素分割。
在这两种情况下:请注意索引以及范围列表从零开始,因此这些列表中的第一个元素将是Inf。