【问题标题】:From DatetimeIndex to list of times从 DatetimeIndex 到时间列表
【发布时间】:2017-01-28 13:58:48
【问题描述】:

我的目标是有一个时间列表(以秒为单位),已经在 5 分钟内打包了一整天的时间列表。 这是我将“2016-07-08”全天打包 5 分钟的代码:

pd.date_range('2016-07-08 00:00:00', '2016-07-08 23:59:00', freq='5Min')

结果:

DatetimeIndex(['2016-07-08 00:00:00', '2016-07-08 00:05:00',
           '2016-07-08 00:10:00', '2016-07-08 00:15:00',
           '2016-07-08 00:20:00', '2016-07-08 00:25:00',
           '2016-07-08 00:30:00', '2016-07-08 00:35:00',
           '2016-07-08 00:40:00', '2016-07-08 00:45:00',
           ...
           '2016-07-08 23:10:00', '2016-07-08 23:15:00',
           '2016-07-08 23:20:00', '2016-07-08 23:25:00',
           '2016-07-08 23:30:00', '2016-07-08 23:35:00',
           '2016-07-08 23:40:00', '2016-07-08 23:45:00',
           '2016-07-08 23:50:00', '2016-07-08 23:55:00'],
          dtype='datetime64[ns]', length=288, freq='5T')

这是每 5 分钟包含所有时间(按秒计)的代码:

for time in pd.date_range('2016-07-08 00:00:00', '2016-07-08 23:59:00', freq='5Min').tolist():    
    time_by_5_min = datetime.datetime.strftime(time.to_datetime(), "%Y-%m-%d %H:%M:%S")
    print pd.date_range(time_by_5_min, freq='S', periods=60)

结果:

DatetimeIndex(['2016-07-08 00:00:00', '2016-07-08 00:00:01',
           '2016-07-08 00:00:02', '2016-07-08 00:00:03',
           '2016-07-08 00:00:04', '2016-07-08 00:00:05',
           '2016-07-08 00:00:06', '2016-07-08 00:00:07',
           '2016-07-08 00:00:08', '2016-07-08 00:00:09',
           '2016-07-08 00:00:10', '2016-07-08 00:00:11',
           '2016-07-08 00:00:12', '2016-07-08 00:00:13',
           '2016-07-08 00:00:14', '2016-07-08 00:00:15',
           '2016-07-08 00:00:16', '2016-07-08 00:00:17',
           '2016-07-08 00:00:18', '2016-07-08 00:00:19',
           '2016-07-08 00:00:20', '2016-07-08 00:00:21',
           '2016-07-08 00:00:22', '2016-07-08 00:00:23',
           '2016-07-08 00:00:24', '2016-07-08 00:00:25',
           '2016-07-08 00:00:26', '2016-07-08 00:00:27',
           '2016-07-08 00:00:28', '2016-07-08 00:00:29',
           '2016-07-08 00:00:30', '2016-07-08 00:00:31',
           '2016-07-08 00:00:32', '2016-07-08 00:00:33',
           '2016-07-08 00:00:34', '2016-07-08 00:00:35',
           '2016-07-08 00:00:36', '2016-07-08 00:00:37',
           '2016-07-08 00:00:38', '2016-07-08 00:00:39',
           '2016-07-08 00:00:40', '2016-07-08 00:00:41',
           '2016-07-08 00:00:42', '2016-07-08 00:00:43',
           '2016-07-08 00:00:44', '2016-07-08 00:00:45',
           '2016-07-08 00:00:46', '2016-07-08 00:00:47',
           '2016-07-08 00:00:48', '2016-07-08 00:00:49',
           '2016-07-08 00:00:50', '2016-07-08 00:00:51',
           '2016-07-08 00:00:52', '2016-07-08 00:00:53',
           '2016-07-08 00:00:54', '2016-07-08 00:00:55',
           '2016-07-08 00:00:56', '2016-07-08 00:00:57',
           '2016-07-08 00:00:58', '2016-07-08 00:00:59'],
          dtype='datetime64[ns]', freq='S')
DatetimeIndex(['2016-07-08 00:05:00', '2016-07-08 00:05:01',
           '2016-07-08 00:05:02', '2016-07-08 00:05:03',
           '2016-07-08 00:05:04', '2016-07-08 00:05:05',
           '2016-07-08 00:05:06', '2016-07-08 00:05:07',
           '2016-07-08 00:05:08', '2016-07-08 00:05:09',
           '2016-07-08 00:05:10', '2016-07-08 00:05:11',
           '2016-07-08 00:05:12', '2016-07-08 00:05:13',
           '2016-07-08 00:05:14', '2016-07-08 00:05:15',
           '2016-07-08 00:05:16', '2016-07-08 00:05:17',
           '2016-07-08 00:05:18', '2016-07-08 00:05:19',
           '2016-07-08 00:05:20', '2016-07-08 00:05:21',
           '2016-07-08 00:05:22', '2016-07-08 00:05:23',
           '2016-07-08 00:05:24', '2016-07-08 00:05:25',
           '2016-07-08 00:05:26', '2016-07-08 00:05:27',
           '2016-07-08 00:05:28', '2016-07-08 00:05:29',
           '2016-07-08 00:05:30', '2016-07-08 00:05:31',
           '2016-07-08 00:05:32', '2016-07-08 00:05:33',
           '2016-07-08 00:05:34', '2016-07-08 00:05:35',
           '2016-07-08 00:05:36', '2016-07-08 00:05:37',
           '2016-07-08 00:05:38', '2016-07-08 00:05:39',
           '2016-07-08 00:05:40', '2016-07-08 00:05:41',
           '2016-07-08 00:05:42', '2016-07-08 00:05:43',
           '2016-07-08 00:05:44', '2016-07-08 00:05:45',
           '2016-07-08 00:05:46', '2016-07-08 00:05:47',
           '2016-07-08 00:05:48', '2016-07-08 00:05:49',
           '2016-07-08 00:05:50', '2016-07-08 00:05:51',
           '2016-07-08 00:05:52', '2016-07-08 00:05:53',
           '2016-07-08 00:05:54', '2016-07-08 00:05:55',
           '2016-07-08 00:05:56', '2016-07-08 00:05:57',
           '2016-07-08 00:05:58', '2016-07-08 00:05:59'],
          dtype='datetime64[ns]', freq='S')
etc

这对我来说是完美的! 我现在想要列表,而不是 pandas.tseries.index.DatetimeIndex.. .tolist() 方法给出了这个:

for time in pd.date_range('2016-07-08 00:00:00', '2016-07-08 23:59:00', freq='5Min').tolist():    
    time_by_5_min = datetime.datetime.strftime(time.to_datetime(), "%Y-%m-%d %H:%M:%S")
    print (pd.date_range(time_by_5_min, freq='S', periods=60)).tolist()

结果:

[Timestamp('2016-07-08 00:00:00', offset='S'), Timestamp('2016-07-08 00:00:01', offset='S'), Timestamp('2016-07-08 00:00:02', offset='S'), Timestamp('2016-07-08 00:00:03', offset='S'), Timestamp('2016-07-08 00:00:04', offset='S'), Timestamp('2016-07-08 00:00:05', offset='S'), Timestamp('2016-07-08 00:00:06', offset='S'), etc]

我想要这样的东西:

           [['2016-07-08 00:00:00', '2016-07-08 00:00:01',
           '2016-07-08 00:00:02', '2016-07-08 00:00:03',
           '2016-07-08 00:00:04', '2016-07-08 00:00:05',
           '2016-07-08 00:00:06', '2016-07-08 00:00:07',
           '2016-07-08 00:00:08', '2016-07-08 00:00:09',
           '2016-07-08 00:00:10', '2016-07-08 00:00:11',
           '2016-07-08 00:00:12', '2016-07-08 00:00:13',
           '2016-07-08 00:00:14', '2016-07-08 00:00:15',
           '2016-07-08 00:00:16', '2016-07-08 00:00:17',
           '2016-07-08 00:00:18', '2016-07-08 00:00:19',
           '2016-07-08 00:00:20', '2016-07-08 00:00:21',
           '2016-07-08 00:00:22', '2016-07-08 00:00:23',
           '2016-07-08 00:00:24', '2016-07-08 00:00:25',
           '2016-07-08 00:00:26', '2016-07-08 00:00:27',
           '2016-07-08 00:00:28', '2016-07-08 00:00:29',
           '2016-07-08 00:00:30', '2016-07-08 00:00:31',
           '2016-07-08 00:00:32', '2016-07-08 00:00:33',
           '2016-07-08 00:00:34', '2016-07-08 00:00:35',
           '2016-07-08 00:00:36', '2016-07-08 00:00:37',
           '2016-07-08 00:00:38', '2016-07-08 00:00:39',
           '2016-07-08 00:00:40', '2016-07-08 00:00:41',
           '2016-07-08 00:00:42', '2016-07-08 00:00:43',
           '2016-07-08 00:00:44', '2016-07-08 00:00:45',
           '2016-07-08 00:00:46', '2016-07-08 00:00:47',
           '2016-07-08 00:00:48', '2016-07-08 00:00:49',
           '2016-07-08 00:00:50', '2016-07-08 00:00:51',
           '2016-07-08 00:00:52', '2016-07-08 00:00:53',
           '2016-07-08 00:00:54', '2016-07-08 00:00:55',
           '2016-07-08 00:00:56', '2016-07-08 00:00:57',
           '2016-07-08 00:00:58', '2016-07-08 00:00:59'],

           ['2016-07-08 00:05:00', '2016-07-08 00:05:01',
           '2016-07-08 00:05:02', '2016-07-08 00:05:03',
           '2016-07-08 00:05:04', '2016-07-08 00:05:05',
           '2016-07-08 00:05:06', '2016-07-08 00:05:07',
           '2016-07-08 00:05:08', '2016-07-08 00:05:09',
           '2016-07-08 00:05:10', '2016-07-08 00:05:11',
           '2016-07-08 00:05:12', '2016-07-08 00:05:13',
           '2016-07-08 00:05:14', '2016-07-08 00:05:15',
           '2016-07-08 00:05:16', '2016-07-08 00:05:17',
           '2016-07-08 00:05:18', '2016-07-08 00:05:19',
           '2016-07-08 00:05:20', '2016-07-08 00:05:21',
           '2016-07-08 00:05:22', '2016-07-08 00:05:23',
           '2016-07-08 00:05:24', '2016-07-08 00:05:25',
           '2016-07-08 00:05:26', '2016-07-08 00:05:27',
           '2016-07-08 00:05:28', '2016-07-08 00:05:29',
           '2016-07-08 00:05:30', '2016-07-08 00:05:31',
           '2016-07-08 00:05:32', '2016-07-08 00:05:33',
           '2016-07-08 00:05:34', '2016-07-08 00:05:35',
           '2016-07-08 00:05:36', '2016-07-08 00:05:37',
           '2016-07-08 00:05:38', '2016-07-08 00:05:39',
           '2016-07-08 00:05:40', '2016-07-08 00:05:41',
           '2016-07-08 00:05:42', '2016-07-08 00:05:43',
           '2016-07-08 00:05:44', '2016-07-08 00:05:45',
           '2016-07-08 00:05:46', '2016-07-08 00:05:47',
           '2016-07-08 00:05:48', '2016-07-08 00:05:49',
           '2016-07-08 00:05:50', '2016-07-08 00:05:51',
           '2016-07-08 00:05:52', '2016-07-08 00:05:53',
           '2016-07-08 00:05:54', '2016-07-08 00:05:55',
           '2016-07-08 00:05:56', '2016-07-08 00:05:57',
           '2016-07-08 00:05:58', '2016-07-08 00:05:59'], etc]

有什么想法吗?

【问题讨论】:

    标签: python list datetime pandas datetimeindex


    【解决方案1】:

    我觉得你可以用DatetimeIndex.strftime:

    我尝试删除一些代码(示例中没有必要,可能在实际代码中很重要)

    for time in pd.date_range('2016-07-08 00:00:00', '2016-07-08 23:59:00', freq='5Min'):    
        print (pd.date_range(time, freq='S', periods=60).strftime("%Y-%m-%d %H:%M:%S").tolist())
    
    ['2016-07-08 00:00:00', '2016-07-08 00:00:01', '2016-07-08 00:00:02', '2016-07-08 00:00:03', '2016-07-08 00:00:04', '2016-07-08 00:00:05', '2016-07-08 00:00:06', '2016-07-08 00:00:07', '2016-07-08 00:00:08', '2016-07-08 00:00:09', '2016-07-08 00:00:10', '2016-07-08 00:00:11', '2016-07-08 00:00:12', '2016-07-08 00:00:13', '2016-07-08 00:00:14', '2016-07-08 00:00:15', '2016-07-08 00:00:16', '2016-07-08 00:00:17', '2016-07-08 00:00:18', '2016-07-08 00:00:19', '2016-07-08 00:00:20', '2016-07-08 00:00:21', '2016-07-08 00:00:22', '2016-07-08 00:00:23', '2016-07-08 00:00:24', '2016-07-08 00:00:25', '2016-07-08 00:00:26', '2016-07-08 00:00:27', '2016-07-08 00:00:28', '2016-07-08 00:00:29', '2016-07-08 00:00:30', '2016-07-08 00:00:31', '2016-07-08 00:00:32', '2016-07-08 00:00:33', '2016-07-08 00:00:34', '2016-07-08 00:00:35', '2016-07-08 00:00:36', '2016-07-08 00:00:37', '2016-07-08 00:00:38', '2016-07-08 00:00:39', '2016-07-08 00:00:40', '2016-07-08 00:00:41', '2016-07-08 00:00:42', '2016-07-08 00:00:43', '2016-07-08 00:00:44', '2016-07-08 00:00:45', '2016-07-08 00:00:46', '2016-07-08 00:00:47', '2016-07-08 00:00:48', '2016-07-08 00:00:49', '2016-07-08 00:00:50', '2016-07-08 00:00:51', '2016-07-08 00:00:52', '2016-07-08 00:00:53', '2016-07-08 00:00:54', '2016-07-08 00:00:55', '2016-07-08 00:00:56', '2016-07-08 00:00:57', '2016-07-08 00:00:58', '2016-07-08 00:00:59']
    ['2016-07-08 00:05:00', '2016-07-08 00:05:01', '2016-07-08 00:05:02', '2016-07-08 00:05:03', '2016-07-08 00:05:04', '2016-07-08 00:05:05', '2016-07-08 00:05:06', '2016-07-08 00:05:07', '2016-07-08 00:05:08', '2016-07-08 00:05:09', '2016-07-08 00:05:10', '2016-07-08 00:05:11', '2016-07-08 00:05:12', '2016-07-08 00:05:13', '2016-07-08 00:05:14', '2016-07-08 00:05:15', '2016-07-08 00:05:16', '2016-07-08 00:05:17', '2016-07-08 00:05:18', '2016-07-08 00:05:19', '2016-07-08 00:05:20', '2016-07-08 00:05:21', '2016-07-08 00:05:22', '2016-07-08 00:05:23', '2016-07-08 00:05:24', '2016-07-08 00:05:25', '2016-07-08 00:05:26', '2016-07-08 00:05:27', '2016-07-08 00:05:28', '2016-07-08 00:05:29', '2016-07-08 00:05:30', '2016-07-08 00:05:31', '2016-07-08 00:05:32', '2016-07-08 00:05:33', '2016-07-08 00:05:34', '2016-07-08 00:05:35', '2016-07-08 00:05:36', '2016-07-08 00:05:37', '2016-07-08 00:05:38', '2016-07-08 00:05:39', '2016-07-08 00:05:40', '2016-07-08 00:05:41', '2016-07-08 00:05:42', '2016-07-08 00:05:43', '2016-07-08 00:05:44', '2016-07-08 00:05:45', '2016-07-08 00:05:46', '2016-07-08 00:05:47', '2016-07-08 00:05:48', '2016-07-08 00:05:49', '2016-07-08 00:05:50', '2016-07-08 00:05:51', '2016-07-08 00:05:52', '2016-07-08 00:05:53', '2016-07-08 00:05:54', '2016-07-08 00:05:55', '2016-07-08 00:05:56', '2016-07-08 00:05:57', '2016-07-08 00:05:58', '2016-07-08 00:05:59']
    ...
    ...
    

    如果需要以嵌套lists append 的形式输出数据到L

    import pandas as pd
    
    L = []
    for time in pd.date_range('2016-07-08 00:00:00', '2016-07-08 23:59:00', freq='5Min'):    
        print (pd.date_range(time, freq='S', periods=60).strftime("%Y-%m-%d %H:%M:%S").tolist())
        L.append(pd.date_range(time, freq='S', periods=60).strftime("%Y-%m-%d %H:%M:%S").tolist())
    
    print (L)
    
    [['2016-07-08 00:00:00', '2016-07-08 00:00:01', '2016-07-08 00:00:02', '2016-07-08 00:00:03', '2016-07-08 00:00:04', '2016-07-08 00:00:05', '2016-07-08 00:00:06', '2016-07-08 00:00:07', '2016-07-08 00:00:08', '2016-07-08 00:00:09', '2016-07-08 00:00:10', '2016-07-08 00:00:11', '2016-07-08 00:00:12', '2016-07-08 00:00:13', '2016-07-08 00:00:14', '2016-07-08 00:00:15', '2016-07-08 00:00:16', '2016-07-08 00:00:17', '2016-07-08 00:00:18', '2016-07-08 00:00:19', '2016-07-08 00:00:20', '2016-07-08 00:00:21', '2016-07-08 00:00:22', '2016-07-08 00:00:23', '2016-07-08 00:00:24', '2016-07-08 00:00:25', '2016-07-08 00:00:26', '2016-07-08 00:00:27', '2016-07-08 00:00:28', '2016-07-08 00:00:29', '2016-07-08 00:00:30', '2016-07-08 00:00:31', '2016-07-08 00:00:32', '2016-07-08 00:00:33', '2016-07-08 00:00:34', '2016-07-08 00:00:35', '2016-07-08 00:00:36', '2016-07-08 00:00:37', '2016-07-08 00:00:38', '2016-07-08 00:00:39', '2016-07-08 00:00:40', '2016-07-08 00:00:41', '2016-07-08 00:00:42', '2016-07-08 00:00:43', '2016-07-08 00:00:44', '2016-07-08 00:00:45', '2016-07-08 00:00:46', '2016-07-08 00:00:47', '2016-07-08 00:00:48', '2016-07-08 00:00:49', '2016-07-08 00:00:50', '2016-07-08 00:00:51', '2016-07-08 00:00:52', '2016-07-08 00:00:53', '2016-07-08 00:00:54', '2016-07-08 00:00:55', '2016-07-08 00:00:56', '2016-07-08 00:00:57', '2016-07-08 00:00:58', '2016-07-08 00:00:59'], ['2016-07-08 00:05:00', '2016-07-08 00:05:01', '2016-07-08 00:05:02', '2016-07-08 00:05:03', '2016-07-08 00:05:04', '2016-07-08 00:05:05', '2016-07-08 00:05:06', '2016-07-08 00:05:07', '2016-07-08 00:05:08', '2016-07-08 00:05:09', '2016-07-08 00:05:10', '2016-07-08 00:05:11', '2016-07-08 00:05:12', '2016-07-08 00:05:13', '2016-07-08 00:05:14', '2016-07-08 00:05:15', '2016-07-08 00:05:16', '2016-07-08 00:05:17', '2016-07-08 00:05:18', '2016-07-08 00:05:19', '2016-07-08 00:05:20', '2016-07-08 00:05:21', '2016-07-08 00:05:22', '2016-07-08 00:05:23', '2016-07-08 00:05:24', '2016-07-08 00:05:25', '2016-07-08 00:05:26', '2016-07-08 00:05:27', '2016-07-08 00:05:28', '2016-07-08 00:05:29', '2016-07-08 00:05:30', '2016-07-08 00:05:31', '2016-07-08 00:05:32', '2016-07-08 00:05:33', '2016-07-08 00:05:34', '2016-07-08 00:05:35', '2016-07-08 00:05:36', '2016-07-08 00:05:37', '2016-07-08 00:05:38', '2016-07-08 00:05:39', '2016-07-08 00:05:40', '2016-07-08 00:05:41', '2016-07-08 00:05:42', '2016-07-08 00:05:43', '2016-07-08 00:05:44', '2016-07-08 00:05:45', '2016-07-08 00:05:46', '2016-07-08 00:05:47', '2016-07-08...
    

    【讨论】:

    • 谢谢@jezrael !你摇滚!
    【解决方案2】:

    five_minute_data = five_minute_date_range.strftime("%Y-%m-%d %H:%M:%S").tolist() 确实以 OP 要求的方式返回数据。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Pandas,我认为将返回值作为数据框有助于进一步处理。

      1. 第一个创建一个包含时间间隔为 5 分钟的数据框。然后,为其中的每一个创建一个嵌套列表,间隔为 1 秒。

        df = pd.date_range('2016-07-08 00:00:00', '2016-07-08 00:15:00', freq='5Min').to_frame()
        df = [pd.date_range(time, freq='S', periods=10).to_pydatetime for time in df[0]]
        
      2. 类似的返回一个 ndarray 而不是一个数据框。也是单行与列表理解。

        arr = [pd.date_range(five_minute, freq='S', periods=60).to_pydatetime
               for five_minute in pd.date_range('2016-07-08 00:00:00', '2016-07-08 00:15:00', freq='5Min')]
        

      【讨论】:

        猜你喜欢
        • 2017-12-03
        • 2018-11-13
        • 2016-10-01
        • 2019-03-07
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        • 2023-02-22
        相关资源
        最近更新 更多