python - 如何判断 csv 文件中经过的小时数?

标签 python csv datetime pandas

我想要一列告诉我从第一行(2002 年 5 月 1 日上午 6:00)到最后一行(2006 年 11 月 20 日下午 2:00)所耗时。如何创建一个额外的列来告诉我自 2002 年 5 月 1 日开始以来经过的小时数? 这是我的数据框:

         Date  Time (HHMM)         Site  Plot  Replicate  Temperature  \
1      5/1/2002          600  Barre Woods    21          7          4.5
2      5/1/2002          600  Barre Woods    31          9          6.5
3      5/1/2002          600  Barre Woods    10          2          5.3
4      5/1/2002          600  Barre Woods     2          1          4.0
5      5/1/2002          600  Barre Woods    13          4          5.5
6      5/1/2002          600  Barre Woods    11          3          5.0
7      5/1/2002          600  Barre Woods    28          8          5.0
8      5/1/2002          600  Barre Woods    18          6          4.5
9      5/1/2002         1400  Barre Woods     2          1         10.3
10     5/1/2002         1400  Barre Woods    31          9          9.0
11     5/1/2002         1400  Barre Woods    13          4         11.0
12     5/1/2002         1400  Barre Woods    18          6          6.5
13     5/1/2002         1400  Barre Woods    11          3         10.3
14     5/1/2002         1400  Barre Woods    10          2         10.5
15     5/1/2002         1400  Barre Woods    28          8         10.3
16     5/1/2002         1400  Barre Woods    21          7         10.5
17     5/1/2002         1400  Barre Woods    16          5         10.3
18    5/22/2002          600  Barre Woods    13          4          6.5
19    5/22/2002          600  Barre Woods    18          6          5.8
20    5/22/2002          600  Barre Woods     2          1          5.5
...          ...          ...          ...   ...        ...          ...
710  11/20/2006         1400  Barre Woods    31          9          7.4

最佳答案

简单:

  • 读取文件,
  • 解析日期和时间,
  • 计算与第一个日期/时间的增量,
  • 写出结果。

以下是使用类文件对象进行演示的实现:

import datetime
import io

data = """\
         Date  Time (HHMM)         Site  Plot  Replicate  Temperature
1      5/1/2002          600  Barre Woods    21          7          4.5
2      5/1/2002          600  Barre Woods    31          9          6.5
3      5/1/2002          600  Barre Woods    10          2          5.3
710  11/20/2006         1400  Barre Woods    31          9          7.4
"""

date_fmt = "%m/%d/%Y %H%M"
fisrt_date = None

with io.StringIO(data) as src_file, io.StringIO(data) as dst_file:

    # copy the header
    dst_file.write(next(src_file))

    for line in src_file:
        parts = line.strip().split()
        if not parts:
            dst_file.write(line)
            continue

        timestamp = parts[1] + " " + parts[2]
        curr_date = datetime.datetime.strptime(timestamp, date_fmt)
        if fisrt_date is None:
            fisrt_date = curr_date
        delta = curr_date - fisrt_date
        dst_file.write(line.strip() + "  " + str(delta) + "\n")

    print(dst_file.getvalue())

你得到:

       Date  Time (HHMM)         Site  Plot  Replicate  Temperature
1      5/1/2002          600  Barre Woods    21          7          4.5  0:00:00
2      5/1/2002          600  Barre Woods    31          9          6.5  0:00:00
3      5/1/2002          600  Barre Woods    10          2          5.3  0:00:00
710  11/20/2006         1400  Barre Woods    31          9          7.4  1664 days, 8:00:00

当然,您可以更改增量值的格式。

关于python - 如何判断 csv 文件中经过的小时数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38409586/

相关文章:

python - 将分组数据框分解为单独的数据框

php - 如何使用 PHP 创建自定义 CSV 文件?

arrays - 使用 CSV 对象声明 Powershell 变量

datetime - Snowflake 外部表无法将变量值 NULL 转换为 DATETIME/TIMESTAMP_NTZ 类型

python - Pandas 过滤器日期时间 : TypeError: can't compare offset-naive and offset-aware datetimes

python - 从图像中删除红色文本

python - 如何使用python实现alpha matting算法

python - 比较字典并仅显示 Python 中的差异?

python - 关于 CSV 阅读器的索引超出范围

MySQL CSV 文件导入日期时间