如何从csv找出第一个和最后一个出现 - python

时间:2018-01-05 14:57:30

标签: python csv

想要使用python从csv文件的行中找出第一次出现和最后一次出现的值。我要比较的值是日期值,即行[1]。

输入:

ABC, 12/2/2017 ,9:21 AM
ABC, 12/2/2017 ,1:15 PM
ABC, 12/2/2017 ,6:38 PM
ABC, 12/4/2017 ,9:21 AM
ABC, 12/4/2017 ,1:01 PM
ABC, 12/7/2017 ,11:59 AM
ABC, 12/8/2017 ,9:33 AM
ABC, 12/8/2017 ,11:15 AM
ABC, 12/8/2017 ,5:15 PM

输出:

ABC, 12/2/2017 ,9:21 AM
ABC, 12/2/2017 ,6:38 PM
ABC, 12/4/2017 ,9:21 AM
ABC, 12/4/2017 ,1:01 PM
ABC, 12/7/2017 ,11:59 AM
ABC, 12/8/2017 ,9:33 AM
ABC, 12/8/2017 ,5:15 PM

提前致谢

2 个答案:

答案 0 :(得分:0)

这假设您的数据已按照示例中的顺序排序。 operator.itemgetter(1)返回一个允许itertools.groupby对第二项上的行进行分组的函数(即row[1])。

import iterools
import operator
import csv

with open('some.csv', newline='') as f:
    reader = csv.reader(f)
    result = []
    for k, g in itertools.groupby(reader, operator.itemgetter(1)):
        group = list(g)
        result.append(group[0])
        if len(group) > 1:
            result.append(group[-1])

答案 1 :(得分:0)

帮助您表达您的问题:

  • 帮助你问清楚,反过来
  • 使您能够编写伪代码,进而
  • 可以是最小的例子(你已经尝试过),反过来
  • 应该由您在问题中发布,反过来
  • 使我们能够指导您找到解决方案

问题

查找第一次和最后一次出现(一天内的时间)作为给定 CSV 文件的行。 该程序需要使用 Python 进行编码。 该程序需要从 CSV 文件中读取行。 我想读取每一行分成 3 列(特别是第二列日期和第三列时间)以便比较它们的值 到其他行的相应值。 比较应该在日期 内进行,并且只比较同一日期的行。

日期值为 row[1]。

给定输入

CSV 文件的一个简单示例有以下 3 行,它们代表一天(第二列的值为 12/2/2017)和 3 次(第三列有 3 个不同的值 9:21 AM、{{1} } 和 1:15 PM):

6:38 PM

伪代码

假设我不知道 python 并且不知道从哪里开始编码,这里是我想用 python 编程的逻辑流程:

  1. 读取 CSV 文件的所有行
  2. 按第二列(日期)值将行分组为一天内的时间列表
  3. 按第三列(时间)值比较时间列表(每天分组)以仅将 2 行过滤到结果中:第一次出现(最早时间)和最后一次出现(最晚时间)
  4. 将过滤结果作为行写入 CSV 输出文件

预期产出

在此之后,预期的输出 CSV 将包含:

ABC, 12/2/2017 ,9:21 AM
ABC, 12/2/2017 ,1:15 PM
ABC, 12/2/2017 ,6:38 PM

请注意,已过滤掉一行(从结果中删除):

ABC, 12/2/2017 ,9:21 AM

ABC, 12/2/2017 ,6:38 PM