python - 如何使用 .csv 文件中同一列中的值进行操作

标签 python loops csv

我有一个包含不同数据格式的 .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

如果有任何帮助,我将不胜感激。

最佳答案

有几种方法可以做到这一点:

  • 跟踪最后一个值并减去
  • 将所有值存储在列表中并逐个元素地减去
  • 将所有内容存储在一个 numpy 数组中并减去移位向量

哪个最好取决于你还想做什么。

举个具体的例子,让我们从一些数据开始:

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 的列表,但两者的各个元素都可以使用 [] 符号访问。

关于python - 如何使用 .csv 文件中同一列中的值进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699921/

相关文章:

python 删除重复项

python - 使用 SciPy 最小化受线性等式约束的二次函数

java - 无法读取重复字符

python - 改进 django Rest 框架中的分页和序列化时间

python - 如何在 Windows 上使用 PyInstaller 创建 Linux 和 MacOS 可执行文件?

javascript - 检查一个对象在数组中是否存在两次

javascript - Javascript 中的自旋锁

php - 抓取完整网站以获取特定 div 标签内的数据,其中 url 包含字符串

java - 如何拆分同一列上的日期和时间并将它们存储在 ArrayList 中?

c# - 我想使用 Entity Framework 将数据从 CSV 文件导入到 SQL 数据库