首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环CSV行,并使用python从前一行中减去当前行

循环CSV行,并使用python从前一行中减去当前行
EN

Stack Overflow用户
提问于 2019-12-27 05:23:02
回答 2查看 479关注 0票数 0

我有一个CSV文件,如下所示:

代码语言:javascript
运行
复制
row1
1
3
5
8

我需要从一行到它的跟随行的不同:

代码语言:javascript
运行
复制
row1
1  1-1 = 0
3  3-1 = 2
5  5-3 = 2
8  8-5 = 3

然后得到结果(0, 2, 2, 3)的平均值。不是寻找一个直接的答案,而是一个起点

EN

回答 2

Stack Overflow用户

发布于 2019-12-27 05:54:54

这里有一种方法:

代码语言:javascript
运行
复制
with open("test.csv") as f:
    lines = f.readlines()
# the first row is always 0
result = [0,] + [ int(lines[x]) - int(lines[x-1]) for x in range(1,len(lines))]
#print the array of differences
print(result)
#print the average
print(sum(result)/len(result))
票数 1
EN

Stack Overflow用户

发布于 2019-12-27 05:29:29

如果你只想要一个起点:

代码语言:javascript
运行
复制
with open("yourfile.csv", "r") as f:
    lines = f.readlines()
for index, line in enumerate(lines[1:]):
    number = int(line)
    if index == 0:
        # magic for the first row
    else:
        # magic for a normal row

你必须以不同的方式处理第一行,因为你不能回头看,因为它是第一行。

编辑:解决方案

代码语言:javascript
运行
复制
with open("input.csv", "r") as f:
    lines = f.readlines()
output = [0]
header = lines[0]
data = [int(number) for number in lines[1:]]
for index, number in enumerate(data[1:],1):
    output.append(number-data[index-1])
print(output)
print("Average: {}".format(sum(output)/len(output)))

输出:

代码语言:javascript
运行
复制
[0, 2, 2, 3]
Average: 1.75
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59493593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档