python - AttributeError:“系列”对象没有属性“isoweekday”
问题描述
我编写了一个函数,可以根据周末和节假日将日期移动指定的工作日数。当我将它与标量值一起使用时它工作正常,但是我在尝试在 pandas DataFrame 上使用时遇到了问题。函数本身如下所示:
def move_date_by_days(init_date, roll=1, nwd_key=None, hol_key=None):
'''
moves date by n-number of working days forward or backward
init_date: date, initial caluclation date
roll: integer, number of days to move forward (+) or backward (-)
nwd_key: string that stands for currency iso code, it is a key in non_working_days dictionary
hol_key: string that stands for currency iso code, it is a key in holidays dictonary
return: date
'''
nwd = non_working_days.get(nwd_key, [])
hol = holidays.get(hol_key,[])
moved_date = init_date + datetime.timedelta(days=roll)
if (moved_date.isoweekday() in nwd) or (moved_date in hol):
if roll >= 0:
moved_date=move_date_by_days(init_date + datetime.timedelta(days=1), roll=roll, nwd_key=nwd_key, hol_key=hol_key)
else:
moved_date=move_date_by_days(init_date + datetime.timedelta(days=-1), roll=roll, nwd_key=nwd_key, hol_key=hol_key)
return moved_date
现在,我有 DataFrame 'df' 列 'start_date' 和 'end_date'
start_date end_date
0 2020-01-31 2020-04-30
1 2020-04-30 2020-07-31
2 2020-07-31 2020-10-31
3 2020-10-31 2020-11-28
我想创建名为“fixing”的第三列,该列将在“start_date”之前的 2 个工作日。我正在尝试这个:
dates_table['fixing'] = move_date_by_days(self.dates_table['start_date'], -2, self.ccy, self.ccy)
但它返回AttributeError: 'Series' object has no attribute 'isoweekday'
请注意,当我引用 DataFrame 的标量数据时,该函数可以正常工作,例如
d1 = s1.dates_table.iat[0,0]
move_date_by_days(d1, -2, 'pln', 'pln')
它返回我所期望的:datetime.date(2020, 1, 29)
任何提示我如何在数据框的整个列上使用该函数,好吗?
解决方案
IIUC,为什么不使用offsets.BDay
或使用offsets.CustomBusinessDay
以下列表holidays
:
df['fixing'] = df['start_date'] - pd.offsets.BDay(2)
df['fixing'] = df['start_date'] - pd.offsets.CustomBusinessDay(2, holidays=holidays['pln'])
[出去]
start_date end_date fixing
0 2020-01-31 2020-04-30 2020-01-29
1 2020-04-30 2020-07-31 2020-04-28
2 2020-07-31 2020-10-31 2020-07-29
3 2020-10-31 2020-11-28 2020-10-29
推荐阅读
- java - 获取 HttpURLConnection.getInputStream() 的内容类型
- python-3.x - 如何在 ubuntu 18.04 上安装 ansible 2.9+ 并使用 python3?
- wordpress - 如何在 WordPress 中重新创建用户表?
- worhp - WORHP 在局部仿射函数上非常慢
- android - WebView 无法访问 android_res 但 android_asset 工作
- django - 为什么 save() 方法在 django 模型中有另一个带有 super 的 save() 方法
- python - 是否可以在 R 中开发或创建类似 python 的类?
- angular - 如何在不导入所有角度组件 SCSS 文件的情况下引用 SASS 函数
- javascript - Lodash递归函数超过最大堆栈大小
- c# - 在 C# 中获取 .csv 文件中的特定行和列值