You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中DatetimeIndex无weekofmonth属性,月内周数独热编码失败求助

解决Pandas DatetimeIndex无weekofmonth属性的问题

你已经成功实现了星期几和月份的独热编码:

import numpy as np
import pandas as pd

# 星期几独热编码
days=["Mon","Tue","Wed","Thu","Fri"]
for i in range(5):
    cv[days[i]] = (cv.index.dayofweek == i).astype(int)

# 月份独热编码
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
for i in range(12):
    cv[months[i]] = (cv.index.month == i+1).astype(int)

但尝试生成月内周数独热编码时,因DatetimeIndex不存在weekofmonth属性,触发AttributeError。以下是两种可行的解决方法:

方法一:通过日期天数计算月内周数

直接利用日期的日数值计算所属月内周数,逻辑简单直观:

# 计算每个日期属于当月的第几周(每周按7天划分,1-7号为第1周,以此类推)
cv['week_of_month'] = (cv.index.day - 1) // 7 + 1

# 生成目标独热编码列
weeks = ['1st Week','2nd Week','3rd Week','4th Week']
for week_name in weeks:
    # 提取周数数字
    week_num = int(week_name.split()[0][0])
    cv[week_name] = (cv['week_of_month'] == week_num).astype(int)

# 若不需要中间列,可删除
# cv.drop('week_of_month', axis=1, inplace=True)

方法二:利用Period对象获取月内周数

借助Pandas的Period类型直接获取月内周数:

# 将DatetimeIndex转换为月度Period,提取月内周数
cv['week_of_month'] = cv.index.to_period('M').week

# 生成独热编码列
weeks = ['1st Week','2nd Week','3rd Week','4th Week']
for i in range(4):
    cv[weeks[i]] = (cv['week_of_month'] == i+1).astype(int)

# 可选删除中间计算列
# cv.drop('week_of_month', axis=1, inplace=True)

注意:部分月份可能存在第5周,若你的业务场景需要,可补充对应列;按你的需求保留前4周即可。

内容的提问来源于stack exchange,提问作者Tomward Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:45:47