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
相关产品推荐
相关产品推荐

