我有一个时间和电阻值的.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'
答案 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