我有一个包含不同数据格式的.csv文件,我正在尝试使用同一列上的值进行操作。
我的.csv文件是这样的:
"int","float","string", more stuff...
实施例
"7","1.378","rider 7",...
"9","1.979","rider 9"
"4","2.520","rider 4"
"2","4.711","rider 2"
More rows
我想在第二列中减去值(只有那些,我不关心其他的)。我设法逐个访问和显示值,但我的问题是,因为我是初学者,我不清楚索引如何处理值并可以保存它们以便以后操作。
我使用的代码是以下代码
with open('file.csv','rb') as input:
csvin = csv.reader(input, delimiter=',')
for row in csvin:
data = float(row[1])
print "value -> %f " % data
我会看到
1.378
1.979
2.520
4.711
etc
但我的目标是获得用前一个值减去每个值的结果
1.979 - 1.378
2.520 - 1.979
4.711 - 2.520
x - 4.711
etc
我很感激任何帮助。
答案 0 :(得分:3)
有几种方法可以做到这一点:
哪个最好取决于你还想做什么。
举一个具体的例子,让我们从一些数据开始:
csvin = [[1, 6],
[2, 14],
[3, 1.1],
[4, 3.14]]
如果我们运行您的代码,我们会看到:
value -> 6.000000
value -> 14.000000
value -> 1.100000
value -> 3.140000
因此我们知道数据正在从第二列获取值。
解决方案1:跟踪最后一个元素
last = None
for row in csvin:
data = float(row[1])
if last is not None:
print "difference -> %f" % (data - last)
last = data
输出:
difference -> 8.000000
difference -> -12.900000
difference -> 2.040000
解决方案2:使用Python列表并逐个元素地减去
all_data = [float(row[1]) for row in csvin]
print "differences: ", [next - curr for next, curr in zip(all_data[1:], all_data[: -1])]
输出:
differences: [8.0, -12.9, 2.04]
注意:在这里,我们构建了所有值的列表以及与列表推导的差异列表。
解决方案3:NumPy
import numpy
all_data = numpy.array([float(row[1]) for row in csvin])
print "differences: ", all_data[1:] - all_data[: -1]
输出:
differences: [ 8. -12.9 2.04]
注意:这比解决方案2略微清晰,因为它使用矢量数学。这里的结果是一个numpy数组,而不是解决方案2的列表,但两者的各个元素可以用[]表示法访问。
答案 1 :(得分:1)
你非常接近。
with open('file.csv', 'rb') as infile:
csvin = csv.reader(infile, delimiter=',')
prev_val = 0
for row in csvin:
data = float(row[1]) - prev_val
print 'value -> %f ' % data
prev_val = data
答案 2 :(得分:0)
以下脚本适用于我......
prev_val = 0.0
with open('file.csv', 'r') as infile:
csvin = csv.reader(infile, delimiter=',')
for row in csvin:
data = float(row[1]) - prev_val
print('delta is', data)
prev_val = float(row[1])