【问题标题】:Binning NumPy array by hour within a datetime field在日期时间字段中按小时对 NumPy 数组进行分箱
【发布时间】:2015-07-29 00:28:30
【问题描述】:

我一直在用 Python 苦苦思索如何在包含日期和时间的字段中根据小时对 csv 中的记录进行分组。该文件包含大约 1,000,000 条记录。我已将文件读入 Pandas 数据帧并创建了一个二维 NumPy 数组,这样每条记录都是 NumPy 数组中的一个子列表,例如:

#this is a NumPy array
npdata = ([somedata, '2014-07-01 08:18:21', somedata, somedata, somedata, somedata, etc], 
[somedata, '2014-07-01 10:01:40', somedata, somedata, somedata, somedata, etc], etc...])

日期和时间是一个字符串,在每个子列表中始终位于相同的位置 (1)。我创建了变量“hourlist”,它是一个包含 24 个空子列表的列表。我想遍历“npdata”以填充“hourlist”中的 24 个子列表中的每一个,其中包含来自 npdata 的子列表子集,这些子列表在日期和时间字段中包含相同的小时。例如。日期时间为 00:xx:xx 的所有“npdata”子列表将在“小时列表”的一个子列表中,所有 01:xx:xx 在另一个中,所有 02:00:00 在另一个中,等等从 0 到 23 小时。我一直试图弄清楚这一点,但一直在碰壁。根据一些谷歌搜索,我认为 datetime.strptime() 类方法应该用作解决方案的一部分,但我不明白如何。

我非常感谢任何提示/建议。

【问题讨论】:

    标签: python arrays datetime numpy subset


    【解决方案1】:

    给定时间字符串的格式,小时总是在字符串的位置 [11:13] 并且总是整数。

    所以只需编写一个函数来获取该整数并将其用作索引,如下所示:

    def get_hour(in_array):
        return int(in_array[1][11:13])
    
    for x in npdata:
        hourlist[get_hour(x)].append(x)
    

    【讨论】:

    • 非常感谢您的帮助;这很好用。我最初在使用代码时遇到问题,因为我错误地构造了空的小时列表,即小时列表 = [[]] * 24,它创建了彼此复制的空,因此无法完成索引。我了解到我应该使用 [[] for i in range (24)] 创建它。
    • 从技术上讲,您也可以使用 itertools 或 numpy 的 empty() 函数来创建它。
    猜你喜欢
    • 2019-09-07
    • 2012-11-15
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多