我的日期如下
df
。
0 2019-04-09 15:40:00
1 2019-04-09 15:45:00
2 2019-04-09 15:50:00
3 2019-04-09 15:55:00
4 2019-04-09 16:00:00
5 2019-04-09 16:05:00
6 2019-04-09 16:10:00
7 2019-04-09 16:15:00
8 2019-04-09 16:20:00
9 2019-04-09 16:25:00
10 2019-04-09 16:30:00
11 2019-04-09 16:35:00
12 2019-04-09 16:40:00
13 2019-04-09 16:45:00
14 2019-04-09 16:50:00
15 2019-04-09 16:55:00
16 2019-04-09 17:00:00
17 2019-04-09 17:05:00
18 2019-04-09 17:10:00
19 2019-04-09 17:15:00
我试图获取最近的日期。
result = df.index.get_indexer([pd.to_datetime('2019-04-09 17:01:00')], method='nearest')
但它给出了以下错误。
match = X.index.get_indexer([dt], method='nearest')
File "/home/mark/.local/lib/python3.9/site-packages/pandas/core/indexes/base.py", line 3740, in get_indexer
return self._get_indexer_non_comparable(target, method=method, unique=True)
File "/home/mark/.local/lib/python3.9/site-packages/pandas/core/indexes/base.py", line 5990, in _get_indexer_non_comparable
raise TypeError(f"Cannot compare dtypes {self.dtype} and {other.dtype}")
TypeError: Cannot compare dtypes int64 and datetime64[ns]
正如 BigBen 所暗示的,get_indexer 将其目标参数与数据帧的 index 进行比较。因此,如果时间列已经采用日期时间格式,您只是忘记首先将日期时间列设置为索引。
df = df.set_index(['DT64'])
df.head()
Empty DataFrame
Columns: []
Index: [2019-04-09 15:40:00, 2019-04-09 15:45:00, 2019-04-09 15:50:00, 2019-04-09 15:55:00, 2019-04-09 16:00:00]
(是的,这是一个空数据框,仅存在索引)
现在您可以获得索引器:(只需在此处复制您的行)
ix = df.index.get_indexer([pd.to_datetime('2019-04-09 17:01:00')], method='nearest')
ix
array([16], dtype=int64)
这已正确返回最近日期的索引。
df.iloc[ix]
Empty DataFrame
Columns: []
Index: [2019-04-09 17:00:00]