2016-11-18 70 views
1

我有一個來自csv文件中'CTTR'列的輸入數據。默認情況下不存在0的數組的Python設置值

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 

但輸出是不是我expeted。當索引[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 

從而輸出與輸入相同的量的大寫金額。 所以如何設置一個值爲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 

回答

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

相同數目的值作爲new的,8.

至於如何獲得最終值的問題;列表理解可以在速度rewriten爲一個循環,很少有鬆動:

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]) 
相關問題