Pandas两DataFrame日期比较报错datetime64[ns]与Timestamp无法比较如何解决
报错原因
- 时区类型不匹配:
MeteoCH的索引是无时区的datetime64[ns]类型,PicoLog的索引是带UTC+1时区的时间戳类型,两类时间对象默认不支持直接比较。 drop方法参数错误:你向drop传入了筛选得到的DataFrame子集,但drop要求传入的是要删除行的索引标签/位置,参数类型不匹配也会触发错误。
解决方案
推荐优先统一两个时间索引的时区规则,再直接用布尔索引筛选保留符合要求的行,写法比drop更简洁不易出错,两种可选实现方式如下:
方式1:给MeteoCH索引添加相同时区(推荐,避免夏令时/时间偏移误差)
# 给MeteoCH的索引添加和PicoLog一致的UTC+1时区,如需适配夏令时可替换为'Europe/Zurich' MeteoCH.index = MeteoCH.index.tz_localize('Etc/GMT-1') # 筛选保留晚于等于PicoLog最小日期的行,直接覆盖原对象 MeteoCH = MeteoCH[MeteoCH.index >= PicoLog.index.min()]
方式2:去除PicoLog最小日期的时区信息
# 提取PicoLog最小日期并去除时区,适配MeteoCH的无时区索引 pico_min_date = PicoLog.index.min().tz_localize(None) # 筛选行 MeteoCH = MeteoCH[MeteoCH.index >= pico_min_date]
如果一定要用drop方法实现,需要传入要删除行的索引:
pico_min_date = PicoLog.index.min().tz_localize(None) MeteoCH.drop(MeteoCH[MeteoCH.index < pico_min_date].index, inplace=True)
内容的提问来源于stack exchange,提问作者Elfo2285
相关产品推荐
相关产品推荐

