创建datetime64[ns]变量(或使用between\u time函数?)

2024-04-20 00:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有时间列的数据帧。首先,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

Tags: 数据dfdatetimeobjecttime时间betweenpd
1条回答
网友
1楼 · 发布于 2024-04-20 00:27:47

您需要DatetimeIndexts,一种可能的解决方案是使用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转换为^{},然后使用^{}

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

相关问题 更多 >