【问题标题】:python extract time from date column to plotpython从日期列中提取时间以绘制
【发布时间】:2016-08-30 11:09:48
【问题描述】:

我有一个 CSV 文件,我只需要提取时间作为单独的列。我尝试了几种方法,但无法正确完成。我必须使用这个时间列来构建线图。有什么想法吗?

日期列格式为: 2016-04-15 06:00:01.704

所以我的时间栏最终应该是: 06:00

我的数据集外观示例:

Date                          x1        x2          .....
2016-04-15 06:00:31.678 5.10165404238 12.2763408161,.....
2016-04-15 06:01:01.670 2.12747098266 10.9392058608,....
2016-04-15 06:01:31.675 3.8868992871   ....

所以我打算这样做: 为每一天绘制每分钟的折线图。 x 轴每 15 分钟滴答一次 每张图在 x 轴上有时间,在 y 轴上有一列

我可以循环它们,但如何实现似乎是一个挑战

我必须计划

【问题讨论】:

  • x 轴是日期时间。 y轴呢?

标签: python csv matplotlib


【解决方案1】:

对于 Python 中的日期和时间操作,我经常使用箭头库。我发现它比 datetime 或 tz 使用起来更直观(即使箭头是建立在两者之上的,以及其他)。

你可以在https://github.com/crsmithdev/arrow找到它的带有API的git页面,当然你也可以简单地安装它

pip install arrow

你应该能够做到:

import arrow
arrow_object = arrow.get('2016-04-15 06:00:01.704')
time_str = arrow_object.format('HH:mm')

您看到时间差了几个小时,这可能是因为它是 UTC。打电话

arrow_object.to('local')

在将时间转换为字符串之前。有关更多信息,请查看 API 文档。他们很不错!

【讨论】:

    【解决方案2】:

    首先使用 datetime.strptime(date_string, format) 将您的时间戳转换为 python datetime

    import datetime
    
    list_string = ['2016-04-15 06:00:01.704']
    fmt = '%Y-%m-%d %H:%M:%S.%f'
    list_datetimes = datetime.datetime.strptime(list_string, fmt)
    

    然后使用 date2num 将日期时间转换为 matplotlib 格式。

    import matplotlib
    x = matplotlib.dates.date2num(list_datetimes)
    

    现在,您可以使用plot_date 进行绘图

    import matplotlib.pyplot as plt
    plt.plot_date(x, y)
    

    使用xlim(...)限制x轴。

    plt.xlim(xmax=...)
    

    【讨论】:

    • 听起来不错。我已经更新了我的帖子。你能建议吗
    【解决方案3】:

    您应该将日期解析为一个结构,以便您可以轻松获取所有部分(小时、日、年、分钟等)。 Datetime.datetime.strptime 是你的朋友。

    【讨论】:

      【解决方案4】:

      如果“日期列格式”是 CSV 文件每一行中的唯一数据,并且如果您已将一行读入变量 s,则可以使用提取时间

      time_column = s[11:16]
      

      这将使您所说的时间精确到分钟。但是,这会将时间向下舍入,而不是最接近的分钟。要四舍五入,您可以检查分号后的冒号后面的字符。

      【讨论】:

      • 我已经更新了我的帖子,提供了更多详细信息。此外,我认为阅读每一行都不可行。可能需要很长时间才能完成
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多