创建一个 datetime64[ns] 变量(或使用 between_time 函数?)
Create a datetime64[ns] variable (or use between_time function?)
我有一个带有时间列的数据框。首先 df.dtypes return ‘object’ 和值都是这样的:
2019-10-18T08:13:26.702000
我使用 pd.to_datetime 和 df.dtypes return '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 后我的 dateframe 的一部分[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
您需要 ts
列中的 DatetimeIndex
,一种可能的解决方案是使用 DatetimeIndex
或将列转换为索引和 select .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
and then use 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
我有一个带有时间列的数据框。首先 df.dtypes return ‘object’ 和值都是这样的:
2019-10-18T08:13:26.702000
我使用 pd.to_datetime 和 df.dtypes return '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 后我的 dateframe 的一部分[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
您需要 ts
列中的 DatetimeIndex
,一种可能的解决方案是使用 DatetimeIndex
或将列转换为索引和 select .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
and then use 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