2016-11-22 88 views
0

我有一個.csv文件的時間和電阻值與我需要刪除的非週期性脈衝。從csv值中減去方波

這就是我想要的,但不能使列表元素進入花車做比較。

import csv 

f=open('sample.csv') 
csv_f=csv.reader(f) 

res = [] 

next(csv_f) 

for row in csv_f: 
    res.append([float(row[1])]) 

l = len(res) 
previous = current = None 

for i, r in enumerate(res): 
    if i > 0: 
     current = float(res[i]) 
     previous = float(res[i-1]) 
     dif = current-previous 
     if dif > 1: 
      res[i] = res[i] - dif 

理想我想繼續減去這個差額,直到我發現另一個邊沿指示脈衝

與此代碼的最後我得到這個錯誤嘗試投放列表元素爲float

類型錯誤:浮置()參數必須是一個字符串或數字

如果我刪除投那麼它說

類型錯誤:不支持的操作數類型爲 - :'list'和'list'

+0

如果你正在尋找邊緣檢測,你可能想看看[itertools.groupby](https://docs.python.org/2/library/itertools.html#itertools.groupby)。除此之外,我不確定你說的問題是什麼。請編輯您的問題,告訴我們您的確切錯誤,以及它發生的線路。 –

+0

謝謝,斯科特。我會看一看。我還編輯了我的帖子,以包含我看到的錯誤。 – PaulyShore

回答

0

您有太多的轉換正在進行。老實說,最好的事情會幫你找到

type(res[i]) 

(無論是通過交互式shell或像pdb調試器)。

你可能認爲res[i]是一個浮點數,但它是一個列表。這是爲什麼。

res.append([float(row[1])]) 

此行附加到res,一個(單元素)列表,其中包含來自行[1]的浮點值。如果你看看水庫(即print(res)),你會看到類似這樣的東西:[[1.2], [2.3], [3.14], [1.714]],當我期望你想要的只是[1.2, 2.3, 3.14, 1.714]

爲了解決這個問題,只是刪除的方括號:

res.append(float(row[1])) 

一旦你這樣做,你不需要您的任何其他浮動轉換:

import csv 

f=open('sample.csv') 
csv_f=csv.reader(f) 

res = [] 

next(csv_f) 

for row in csv_f: 
    res.append(float(row[1])) 

l = len(res) 
previous = current = None 

for i, r in enumerate(res): 
    if i > 0: 
     current = res[i] 
     previous = res[i-1] 
     dif = current-previous 
     if dif > 1: 
      res[i] = res[i] - dif 
+0

非常好,這讓我回到了進步。感謝斯科特! – PaulyShore