python – 带有numpy.maximum的Pandas Datetimeindex会出错

我遇到的错误可能是pandas中的错误(
Windows上的0.22,
Python版本3.6.3),或者更确切地说是与NumPy(v.1.14)的交互,但是我想知道我是否遗漏了更多的东西深刻.

这是问题:如果我有两个相同长度的Datetimeindex对象,并且我们之间使用np.maximum,则输出符合预期:

import pandas as pd
import numpy as np
v1 = pd.DatetimeIndex(['2016-01-01', '2018-01-02', '2018-01-03'])
v2 = pd.DatetimeIndex(['2017-01-01', '2017-01-02', '2019-01-03'])
np.maximum(v1, v2)

返回元素最大值:

DatetimeIndex([‘2017-01-01’, ‘2018-01-02’, ‘2019-01-03′], dtype=’datetime64[ns]’, freq=None)

但是,如果我尝试只使用两者中的一个元素,我会收到一个错误:

np.maximum(v1, v2[0])

pandas_libs\tslib.pyx in pandas._libs.tslib._Timestamp.richcmp()

TypeError: Cannot compare type ‘Timestamp’ with type ‘int’

有两种解决方法可行,但两者都很难写,要么使用切片要么显式转换为pydatetime:

np.maximum(v1, v2[:1])

DatetimeIndex([‘2017-01-01’, ‘2018-01-02’, ‘2018-01-03′], dtype=’datetime64[ns]’, freq=None)

要么:

v1.to_pydatetime() - v2[0].to_pydatetime()

array([datetime.datetime(2017, 1, 1, 0, 0),
datetime.datetime(2018, 1, 2, 0, 0),
datetime.datetime(2018, 1, 3, 0, 0)], dtype=object)

第一种解决方法实际上非常奇怪,因为执行v2 – v1 [0]正常工作,而v2 – v1 [:1]给出错误(这次是预期的,因为两个结果时间序列具有未对齐的索引).

最佳答案 一种解决方案是转换为pd.Series,然后使用
pd.Series.clip

pd.Series(v1).clip(v2[0])

# 0   2017-01-01
# 1   2018-01-02
# 2   2018-01-03
# dtype: datetime64[ns]
点赞