如何将pandas系列转换为整数以用于datetime.fromisocalendar
我正在尝试处理一个包含日期的pandas系列。我想从里面取出日期,然后返回下一个星期一。
这是我尝试过的代码:
db['date'] = datetime.date.fromisocalendar(db['date'].dt.year.astype(np.int64),(db['date'].dt.week+1).astype(np.int64),1)
但是我遇到了以下错误:
TypeError: 'Series' object cannot be interpreted as an integer
有没有更好的方法来做到这一点呢?
2 个回答
1
我看到有两种选择:
第一种是手动计算一个 时间差:
df = pd.DataFrame({'date': pd.date_range('2024-01-01', '2024-01-10')})
df['next_Monday'] = df['date'].add(pd.to_timedelta(7-df['date'].dt.dayofweek, unit='D'))
第二种是使用 Week
的偏移量:
df = pd.DataFrame({'date': pd.date_range('2024-01-01', '2024-01-10')})
df['next_Monday'] = df['date'].add(pd.offsets.Week(n=1, weekday=0))
输出结果:
date next_Monday
0 2024-01-01 2024-01-08
1 2024-01-02 2024-01-08
2 2024-01-03 2024-01-08
3 2024-01-04 2024-01-08
4 2024-01-05 2024-01-08
5 2024-01-06 2024-01-08
6 2024-01-07 2024-01-08
7 2024-01-08 2024-01-15
8 2024-01-09 2024-01-15
9 2024-01-10 2024-01-15
如果你只想在一天结束后考虑第二天(也就是说,如果今天是星期一,就保持当前日期):
df['next_Monday'] = df['date'].add(pd.offsets.Week(n=0, weekday=0))
date next_Monday
0 2024-01-01 2024-01-01
1 2024-01-02 2024-01-08
2 2024-01-03 2024-01-08
3 2024-01-04 2024-01-08
4 2024-01-05 2024-01-08
5 2024-01-06 2024-01-08
6 2024-01-07 2024-01-08
7 2024-01-08 2024-01-08
8 2024-01-09 2024-01-15
9 2024-01-10 2024-01-15
1
我觉得这个挺不错的:
db['date'] = db['date'] + pd.to_timedelta(7-db['date'].dt.dayofweek,'d')