我正在尝试确定两个月之间的差额是偶数月还是奇数月。
我使用了命令:
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。
答案 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