代码
None + pd.Timedelta("1 day")
Run Code Online (Sandbox Code Playgroud)
评估一个奇怪的结果:
Timedelta('-106751 days +00:12:43:145224')
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
正如评论中提到的,这种行为已在 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)
在后来的版本中,添加了第二个条件,首先转换other为Timedelta对象,然后再次测试条件,因此有效测试:
>>> Timedelta(None) is NaT
True
Run Code Online (Sandbox Code Playgroud)
所以现在NaT是在 的情况下返回None + Timedelta。