类型错误:无法比较 dtypes int64 和 datetime64[ns]

问题描述 投票:0回答:1

我的日期如下

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]
pandas datetime indexer
1个回答
2
投票

正如 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]
© www.soinside.com 2019 - 2024. All rights reserved.