python - 将日期时间索引熊猫数组与日期时间对象进行比较
问题描述
我正在尝试在某个时间戳之前删除 pandas 数据框中的任何数据(我现在在此示例中使用)
蜡烛数据[分钟] 是我的数据框...
candle_data[min].loc[candle_data[min].index < pd.to_datetime(datetime.datetime.utcnow(), unit='ns')]
TypeError: Invalid comparison between dtype=datetime64[ns, UTC] and Timestamp
这是数据数据框
candle_data[min].loc[candle_data[min].index]
volume complete o h l c
time
2021-09-06 20:00:00+00:00 353 True 1.25344 1.25374 1.25324 1.25362
2021-09-06 20:05:00+00:00 125 True 1.25357 1.25357 1.25320 1.25338
2021-09-06 20:10:00+00:00 75 True 1.25336 1.25354 1.25332 1.25333
2021-09-06 20:15:00+00:00 70 True 1.25336 1.25356 1.25331 1.25336
2021-09-06 20:20:00+00:00 68 True 1.25333 1.25352 1.25332 1.25338
... ... ... ... ... ... ...
2021-09-08 13:45:00+00:00 429 True 1.26782 1.26891 1.26758 1.26879
2021-09-08 13:50:00+00:00 363 True 1.26877 1.26901 1.26822 1.26831
2021-09-08 13:55:00+00:00 340 True 1.26829 1.26832 1.26657 1.26680
2021-09-08 14:00:00+00:00 1219 True 1.26688 1.26797 1.26460 1.26790
2021-09-08 14:05:00+00:00 654 True 1.26786 1.26858 1.26641 1.26650
[499 rows x 6 columns]
这就是 pd.to_datetime 给我的
pd.to_datetime(datetime.datetime.utcnow(), unit='ns')
Timestamp('2021-09-08 14:34:37.175469')
我试图查看其他文章和谷歌,但未能避免与此非常相似的消息......我如何将时间戳转换为可以比较的东西?
解决方案
可以使用pd.Timestamp
对象(通过使用pd.to_datetime
问题中的方法创建)还是直接使用 Pythondatetime
库。在某些情况下存在一些差异(在使用 DataFrames 时,我通常更愿意坚持使用 pandas 对象),但在您的情况下,问题在于时区差异。
您的索引已本地化 ( datetime64[ns, UTC]
),但不是您的 datetime 对象。utcnow
由于您使用方法,因此可能会让某些人感到困惑。此方法将返回 utc 当前时间,但不是本地化的,这意味着它是一个没有 timezone 的 datetime 对象。
解决方案很简单,您可以执行以下操作之一(您可以尝试一下以了解它的工作原理):
- 使用没有时区的索引:
candle_data.index.tz_localize(None) < pd.to_datetime(datetime.datetime.utcnow(), unit='ns')
- 本地化您的 Timestamp 对象:
candle_data.index < pd.to_datetime(datetime.datetime.utcnow(), unit='ns', utc=True)
- 在不使用日期时间的情况下本地化您的 Timestamp 对象:
candle_data[min].index < pd.Timestamp("now", tz="UTC")
并且有越来越多的方法可以做到这一点。而且我通常会建议使用切片而不是与索引进行这种比较。您可以执行以下操作:
candle_data[:datetime.datetime.utcnow()]
# or
candle_data[:pd.Timestamp("now")]
它将返回索引日期时间小于当前时间的所有数据。
推荐阅读
- javascript - 根据区域设置使用 am / pm / h 单位格式化 LT 时刻
- r - 检查一行是否等于 R 中的任何其他行
- java - Karaf 4.2.9 上的 OPS4J Pax CDI Sample1
- postgresql - 将 postgres docker 实例连接到 dotnet core 3.1 会给出“提供节点名或服务名,或未知错误”
- java - Springboot 2.3.4.RELEASE 连接到 Azure postgresql 失败
- google-cloud-platform - 为存储桶创建 Google Cloud Pub/Sub 订阅?
- twitter-bootstrap - 如何将图层放置在浮动的图层下方?
- r - 在夏皮罗威尔克测试中具有相同结果的两个不同样本
- java - DockerFile : RUN 传递参数
- firefox - navigator.mediaDevices.getUserMedia 无法解析