我使用dateutil的相对delta获得了一个类类型错误。我的代码在这里:
#import packages
import numpy as np
import pandas as pd
import datetime as dt
from dateutil.relativedelta import relativedelta
from pandas import DataFrame
from pandas import Series
#timing
pers = 12
monthpp = 1
month_per = int(pers/monthpp)
sdate = dt.date(2016,1,1)
ops = dt.date(2016,3,15)
bop1 = sdate
eop1 = bop1 + relativedelta(months =+ 1, days =- 1)
edate = sdate + relativedelta(months =+ month_per)
rng_bop = pd.date_range(bop1, freq = 'MS', periods = pers)
rng_eop = pd.date_range(eop1, freq = 'M', periods = pers)
ops_line = ops >= rng_bop and ops <= rng_eop
#outputs
print(sdate)
print(edate)
print(rng_bop)
print(rng_eop)
如果某人有更好的替代方法,我会对此持开放态度 - 我正在尝试将excel内容翻译成python,并且可能无法超级有效地进行。
这部分的最终目标是能够按月,季度或半年或几年调整时间段,但我现在只需几个月就能满意。 EOP线应为(BOP +期间 - 1天)。
我也不认为我的ops_line定义会起作用 - 我正在尝试从逻辑运算符创建一个布尔数组。有什么意义吗?
答案 0 :(得分:1)
它应该是months =+ 1, days =- 1
而不是google.com/index.php?v1=x&v=y
,因为后者将月和日分配给1和-1分别
答案 1 :(得分:0)
正如Leo Wahyd所提到的=+
/ =-
在大多数语言中都是无效的语法。
年,月,周,日,小时,分钟,秒,微秒:
相关信息,可能是否定的(参数是复数);加入 或者用相对信息减去相对δ 对原始日期时间值进行相应的aritmetic操作 与relativedelta中的信息。
我认为,实际上,它应该是:
eop1 = bop1 + relativedelta(months = 1, days = -1)
edate = sdate + relativedelta(months = month_per)
答案 2 :(得分:0)
我对熊猫日期范围有类似的问题。我尝试使用 DateOffset 没有成功,然后我发现了 this:
<块引用>从周期中添加和减去整数会按其自身的频率移动周期。不同频率(跨度)的 Period 之间不允许进行算术运算。
事实证明,答案其实很简单!假设您的 Period
和 PeriodRange
对象具有 freq == "M"
,您可以通过添加常规数字来添加它们:
>>> period
Period('2020-01', 'M')
>>> period + 1
Period('2020-02', 'M')
>>> period_range
PeriodIndex(['2020-01', '2020-02', '2020-03', '2020-04', '2020-05', '2020-06',
'2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12'],
dtype='period[M]', freq='M')
>>> period_range + 1
PeriodIndex(['2020-02', '2020-03', '2020-04', '2020-05', '2020-06', '2020-07',
'2020-08', '2020-09', '2020-10', '2020-11', '2020-12', '2021-01'],
dtype='period[M]', freq='M')
我知道这个问题已经很老了,但希望我的回答对某人有所帮助!