【问题标题】:Create a datetime64[ns] variable (or use between_time function?)创建一个 datetime64[ns] 变量(或使用 between_time 函数?)
【发布时间】:2020-11-05 09:21:28
【问题描述】:

我有一个带有时间列的数据框。首先 df.dtypes 返回“object”,所有值都如下所示:

2019-10-18T08:13:26.702000

我使用 pd.to_datetime 和 df.dtypes 返回 ‘datetime64[ns]’ 并且值都如下所示:

2019-10-18 08:13:26.702000

我希望能够根据时间间隔选择日期范围的范围。我第一次尝试:

df.iloc[pd.DatetimeIndex['ts'].indexer_between_time(datetime.time(2019,10,18,8,19,0),
                                                    datetime.time(2019,10,18,8,21,0))]

然后我得到 TypeError:

TypeError                                 Traceback (most recent call last)
<ipython-input-31-9e1f5757369e> in <module>
----> 1 df.iloc[pd.DatetimeIndex['ts'].indexer_between_time(datetime.time(2019,10,18,8,19,0),
      2                                                     datetime.time(2019,10,18,8,21,0))]
      3 
      4 
      5 #df.pd.DatetimeIndex['ts'].indexer_between_time(time(8:19), time(08:21:00))

TypeError: 'type' object is not subscriptable

然后我尝试通过定义一个 datetime64[ns] 变量来解决问题,然后尝试执行“大于和小于”选择。但我无法毫无错误地定义变量。 (并且不确定这种解决方法是否有效..?)

time1 = pd.datetime.datetime64[ns](2019-10-18T08:19:00.0)

给予:

SyntaxError: invalid syntax

整理数据帧的时间间隔的最佳方法是什么?我需要能够按秒排序,而不是毫秒。

如果需要,这是转换为 datetime64[ns] 后我的日期帧的一部分:

                        ts  value
0  2019-10-18 08:13:26.702     14
1  2019-10-18 08:13:26.765     10
2  2019-10-18 08:13:26.790      5
3  2019-10-18 08:13:26.889      6
4  2019-10-18 08:13:26.901      8
5  2019-10-18 08:13:27.083     33
6  2019-10-18 08:13:27.098     21
7  2019-10-18 08:13:27.101     11
8  2019-10-18 08:13:27.129     22
9  2019-10-18 08:13:27.159     29
10 2019-10-18 08:13:27.188      7
11 2019-10-18 08:13:27.212     20
12 2019-10-18 08:13:27.228     24
13 2019-10-18 08:13:27.246     30
14 2019-10-18 08:13:27.395     34
15 2019-10-18 08:23:26.375     40
16 2019-10-18 08:23:26.527     49
17 2019-10-18 08:23:26.725     48

【问题讨论】:

    标签: python pandas datetime-format


    【解决方案1】:

    您需要来自ts 列的DatetimeIndex,一种可能的解决方案是使用DatetimeIndex 或将列转换为索引并选择.index

    df['ts'] = pd.to_datetime(df['ts'])
    df = df.iloc[pd.DatetimeIndex(df['ts']).indexer_between_time(datetime.time(8,20,0),
                                                                 datetime.time(8,27,0))]
    

    df['ts'] = pd.to_datetime(df['ts'])
    df = df.iloc[df.set_index('ts').index.indexer_between_time(datetime.time(8,20,0),
                                                               datetime.time(8,27,0))]
    
    print (df)
                            ts  value
    15 2019-10-18 08:23:26.375     40
    16 2019-10-18 08:23:26.527     49
    17 2019-10-18 08:23:26.725     48
    

    但更简单的解决方案是使用DatetimeIndex - 将列ts 转换为DataFrame.set_index,然后使用DataFrame.between_time

    df['ts'] = pd.to_datetime(df['ts'])
    df = df.set_index('ts').between_time(datetime.time(8,20,0), datetime.time(8,27,0))
    print (df)
                             value
    ts                            
    2019-10-18 08:23:26.375     40
    2019-10-18 08:23:26.527     49
    2019-10-18 08:23:26.725     48
    

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 2023-02-05
      • 2020-10-27
      • 2015-11-02
      • 2022-01-09
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多