从csv值中减去方波

时间:2016-11-22 15:46:17

标签: python 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

理想情况下,我想继续减去这个差异,直到我检测到另一条指示脉冲结束的边缘

使用此代码我尝试将list元素转换为float

时出现此错误

TypeError:float()参数必须是字符串或数字

如果我删除了演员,那就说

TypeError:不支持的操作数类型 - :'list'和'list'

1 个答案:

答案 0 :(得分:0)

你的转化次数太多了。老实说,帮助你的最好的事情就是找出

type(res[i])

(通过交互式shell或像pdb这样的调试器)。

你可能认为res[i]是一个浮点数,而是一个列表。这就是原因。

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

此行附加到res,一个(单个元素)列表,由行[1]中的浮点值组成。如果您查看res(即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