为什么我不能从下一个减去一个日期范围并转换为整数?

时间:2019-05-07 05:47:43

标签: python pandas numpy

我正在尝试确定两个月之间的差额是偶数月还是奇数月。

我使用了命令:

import pandas as pd
(pd.to_datetime('2019-01-01').to_period('M') - pd.to_datetime('2018-08-01').to_period('M')) % 2

这似乎在python 3.6.7中有效,但是在另一个python 3.7.3环境中,我得到了错误:

>>> import pandas as pd
>>> (pd.to_datetime('2019-01-01').to_period('M') - pd.to_datetime('2018-08-01').to_period('M')) % 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'MonthEnd' and 'int'

我正在尝试找出哪种软件包在这里会有所作为,或者是否还有另一种方法可以在两种版本中都起作用?

我看了看我安装的软件包,虽然有一些版本差异,但是我不知道会有什么不同。

无法正常工作的环境具有python 3.7.3,pandas 0.24.2和numpy-base 1.16.2。适用的环境具有python 3.6.7,pandas 0.22.0,但没有任何版本的numpy-base。两者都有python-dateutil 2.8.0和numpy 1.16.2。

2 个答案:

答案 0 :(得分:4)

问题是Period Subtraction在熊猫0.24以上:

  

从另一个期间中减去一个期间将得出DateOffset。而不是整数(GH21314)

解决方案是归因.n

a = (pd.to_datetime('2019-01-01').to_period('m') - pd.to_datetime('2018-08-01').to_period('m'))

print (a)
<5 * MonthEnds>

print (a.n)
5

print (a.n % 2)
1

答案 1 :(得分:2)

这是因为在熊猫0.24.2中,它返回:

<5 * MonthEnds>

不是int对象,而是MonthEnd对象,因此您需要执行.n,这将为您提供5的实际数量:< / p>

print((pd.to_datetime('2019-01-01').to_period('M') - pd.to_datetime('2018-08-01').to_period('M')).n % 2)

哪个输出:

1