如何将pandas系列转换为整数以用于datetime.fromisocalendar

0 投票
2 回答
41 浏览
提问于 2025-04-11 22:54

我正在尝试处理一个包含日期的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')

撰写回答