我有来自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}}
答案 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])