2016-11-18 8 views
1

私はcsvファイルの 'CTTR'列の入力データを持っています。デフォルトでは存在しない配列のPython設定値

0 
2 
2 
23 
18 
28 
27 
58 
41 
12 
35 
20 

私のコードは、インデックスi

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 

ですが、出力は私がexpetedものではありません。 index [0]、[1]、[10]、[11]のときに配列が存在しないためです。私はインデックス[0]、vals [i-2]とvals [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 

入力量と同じ出力のようAMOUT。 存在しない配列に対して、デフォルトで0で値を設定するにはどうすればいいですか?終了値を取得する方法の問題としてexmapleため

[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 

答えて

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(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(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 

、我々は境界例外を処理するために、「もし」文で投げることができ

もう1つの選択肢は、アレイをいくつかの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]) 
関連する問題