Python设置数组的值,默认情况下不存在0
我有csv文件中“CTTR”列的输入数据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
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])