【问题标题】:Find first and last occurrence in CSV by day-time按白天在 CSV 中查找第一次和最后一次出现
【发布时间】:2021-02-19 11:33:08
【问题描述】:

想要使用 python 从 csv 文件的行中找出第一次出现和最后一次出现的值。我要比较的值是日期值,即 row[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

提前致谢

【问题讨论】:

  • 欢迎来到 Stack Overflow!纯粹的代码编写请求在 Stack Overflow 上是题外话——我们希望这里的问题与特定的编程问题相关——但我们很乐意帮助您自己编写!告诉我们what you've tried,以及您遇到的问题。这也将有助于我们更好地回答您的问题。
  • 您的数据是否已经像您的输入示例一样排序?
  • 问题不清楚。第一行将是 row[0] 而不是 row[1]。清楚地说明你想要做什么,以及到目前为止你尝试了哪些代码。
  • @NikosTavoularis 如果您标记给定的链接(查找 csv 文件的最后一行),很明显这不能回答内容过滤的问题(last timestamp ) ????

标签: python csv datetime filtering


【解决方案1】:

这假定您的数据已经按照您的示例进行了排序。 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])

【讨论】:

  • 这是对❗(语义上)排序行的强假设,但会实现有问题的过滤:每天最后一行-组==最新一天时间?
【解决方案2】:

帮助你表达你的问题:

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

问题

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

日期值,即 row[1]。

给定输入

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

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

伪代码

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

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

预期输出

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

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

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

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

ABC, 12/2/2017 ,1:15 PM

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 2019-12-07
    • 2021-12-19
    • 2013-11-03
    • 2015-06-08
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多