为什么可以添加pd.Timedelta和None?

jho*_*ack 6 python pandas

代码

None + pd.Timedelta("1 day")
Run Code Online (Sandbox Code Playgroud)

评估一个奇怪的结果:

Timedelta('-106751 days +00:12:43:145224')
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Sho*_*alt 2

正如评论中提到的,这种行为已在 Pandas 的后续版本中得到修复。从查看代码来看,它似乎已在本次提交的0.23 版本中修复。

更详细一点 - 计算 delta 的函数代码_binary_op_method_timedeltalike包含条件:

elif other is NaT:  # (N)ot-(A)-(T)ime, the time equivalent of NaN
    return NaT
Run Code Online (Sandbox Code Playgroud)

但事实None并非如此NaT,这就是该错误的原因:

>>> None is NaT
False
Run Code Online (Sandbox Code Playgroud)

在后来的版本中,添加了第二个条件,首先转换otherTimedelta对象,然后再次测试条件,因此有效测试:

>>> Timedelta(None) is NaT
True
Run Code Online (Sandbox Code Playgroud)

所以现在NaT是在 的情况下返回None + Timedelta