Python默认设置的值为0时不存在的数组

时间:2016-11-18 02:33:01

标签: python arrays csv pandas numpy

我有来自csv文件中'CTTR'列的输入数据。

import pandas as pd
import numpy as np

df = pd.read_csv("book1.csv")
vals = np.array(df['CTTR'])
new = np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10.

for i in new:
    print i

我的代码,我是索引

7.6
16.2
20.3
28.3
33.9
40.8
36.6
27.8

但输出不是我所用的。当索引[0],[1],[10]和[11]时,某些数组不存在。我的意思是当index [0],vals [i-2]和vals [i-1]不存在时我的代码跳过这一步。

输出

0.6
3.5
7.6
16.2
20.3
28.3
33.9
40.8
36.6
27.8
24.5
16.2

我的预期输出

[0] = (vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2])/10
[0] = (0 + 0 +4*0 + 2*2 + 2) /10
[0] = 0.6

所以输出的数量与输入量相同。 那么如何为不存在的数组默认设置0值? 为了例如

{{1}}

1 个答案:

答案 0 :(得分:1)

In [340]: list(range(2,len(vals)-2))
Out[340]: [2, 3, 4, 5, 6, 7, 8, 9]

new,8中相同数量的值。

至于如何获得最终价值的问题;列表理解可以重写为一个循环,速度很小:

 alist = []
 for i in range(2,len(vals)-2):
    newval =  [vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2]
    alist.append(newval)
 np.array(alist)/10

对于扩展范围,我们可以投入'如果'处理越界案件的陈述:

 alist = []
 for i in range(len(vals)):
    if i<2: ...
    else:
         newval =  [vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2]
    alist.append(newval)
 np.array(alist)/10

另一个选择是用一些0填充数组

In [354]: vals1=np.concatenate(([0,0],vals,[0,0]))
In [355]: 
In [355]: new = np.array([vals1[i-2] + 2*vals1[i-1] + 4*vals1[i] + 2*vals1[i+1] 
     ...: + vals1[i+2] for i in range(2,len(vals1)-2)])/10.
In [356]: new
Out[356]: 
array([  0.6,   3.5,   7.6,  16.2,  20.3,  28.3,  33.9,  40.8,  36.6,
        27.8,  24.5,  16.2])