Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python设置数组的值,默认情况下不存在0_Python_Arrays_Csv_Pandas_Numpy - Fatal编程技术网

Python设置数组的值,默认情况下不存在0

Python设置数组的值,默认情况下不存在0,python,arrays,csv,pandas,numpy,Python,Arrays,Csv,Pandas,Numpy,我有csv文件中“CTTR”列的输入数据 0 2 2 23 18 28 27 58 41 12 35 20 我的代码,我是索引 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

我有csv文件中“CTTR”列的输入数据

0
2
2
23
18
28
27
58
41
12
35
20
我的代码,我是索引

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
但产出并不是我所期望的。因为索引[0]、[1]、[10]和[11]时某些数组不存在。我的意思是,当索引[0]、VAL[i-2]和VAL[i-1]不存在时,我的代码会跳过这一步

输出

7.6
16.2
20.3
28.3
33.9
40.8
36.6
27.8
我的预期产出

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的值呢? 为埃克斯梅普

[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
新建
中相同的值数,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
对于扩展范围,我们可以使用“if”语句来处理越界情况:

 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
 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
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])