2016-11-22 89 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