【问题标题】:How to create a 5-minute interval datetime index using incomplete dataset (Python)如何使用不完整的数据集(Python)创建一个 5 分钟间隔的日期时间索引
【发布时间】:2014-08-12 04:11:31
【问题描述】:

第一次在这里发帖,希望能有收获:)

基本上,我有一个包含时间序列数据的 CSV 文件。我正在使用 pandas.read_csv 从 CSV 创建数据框。然而,它的组织方式很烦人,第一列仅用于日期,第二列用于每天 5 分钟的间隔(例如 0、5、10、15,直到 1435)。使问题更加复杂的是,有些日子数据不完整,即缺少行。因此,对于特定日期,时间间隔可能会变为 5、10、60、505 等。这意味着我不能简单地以 5 分钟的间隔从头开始创建日期时间索引。

因此,我必须有某种方法使用 B 列中的数据并将其与 A 列中的日期结合起来,以提供我想要的时间序列。我必须将此结果列附加到同一个数据框,然后将其用作索引,以允许我生成每小时数据的平均值。

经过大量的血汗和泪水,我想出了这个到目前为止,它生成了一个新的时间列表。据我所知,第一部分是正确的。

df = pd.read_csv(myfile)

newtime = []

for r in df['Time']:
    if r // 60 < 10:
        if r % 60 < 10:
            r = "0" + str(r // 60) + ":0" + str(r % 60) + ":00"
        else:
            r = "0" + str(r // 60) + ":" + str(r % 60) + ":00"
    else:
        if r % 60 < 10:
            r = str(r // 60) + ":0" + str(r % 60) + ":00"
        else:
            r = str(r // 60) + ":" + str(r % 60) + ":00"

    newtime.append(r)

datetimes = []

for r in range(len(df['Date'])+1):
    v = str(df['Date'][r]) + newtime[r]
    datetimes.append(v)

print datetimes

但是,当我尝试将它与日期(代码的最后一点)连接时,我得到一个非常随机的错误(KeyError:203591L)。奇怪的是,如果我将 v = 替换为 print 并删除带有 append 语句的行,它就可以正常工作。

我希望有人可以帮助我将现有代码开发成一个解决方案(直到它可以用于df.resample('1H', how={columnX: np.mean}) ),或者告诉我如何以不同的方式完成整个事情。

提前非常感谢!

Seb

【问题讨论】:

    标签: python python-2.7 datetime pandas


    【解决方案1】:

    看起来你正在寻找这个:

    In [17]: df
    Out[17]: 
             Date  Time
    0  2014-05-01    60
    1  2014-05-02   505
    
    In [18]: pd.to_datetime(df['Date']) + pd.to_timedelta(df['Time'], unit='m')
    Out[18]: 
    0   2014-05-01 01:00:00
    1   2014-05-02 08:25:00
    dtype: datetime64[ns]
    

    【讨论】:

    • 谢谢,但由于某种原因,它对我来说并没有相同的输出。它以 2004-01-11 00:00:00.000000005、2004-01-11 00:00:00.000000010 等形式出现。我完全复制了你的代码,所以不知道为什么......?
    • @Bhajmeister 您使用的是什么熊猫版本?我正在使用 0.14.0。您的时间列类型是整数吗?你能显示 pd.to_timedelta(df['Time'], unit='m') 的输出吗?
    • 我正在使用 0.13.1 所以也许就是这样。我可以确认时间列类型是 int64。不知道如何在此评论框中正确显示输出,但它的开头是这样的(有效数字比看起来的打印语句少):0 00:00:00 1 00:00:00.000000 2 00:00:00.000000
    • 已更新到 pandas 0.14.0,现在可以使用 - 谢谢!只需要弄清楚如何将新列附加到数据框并将其设置为索引,但我相信这很容易。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2019-03-16
    • 2019-09-05
    相关资源
    最近更新 更多