如何在Pandas中根据日期判断周末并生成0/1值的新列
问题原因
- 字段名不匹配:你已经将星期数值赋值给了
Date列,但后续筛选条件误用了不存在的Day列,无法匹配到对应字段。 - 数据类型不匹配:
dt.dayofweek返回的是整数类型(周一对应0,周日对应6),你用字符串形式的'0'、'5'做等值判断,永远返回False,自然无法完成赋值。 - 链式赋值风险:你使用
dataset3.Weekend[筛选条件] = 0这种链式索引写法,容易触发pandas的SettingWithCopyWarning,赋值操作可能不会生效在原DataFrame上。 - 冗余操作:不需要单独先创建空的Weekend列,可直接通过条件判断生成新列。
解决方案
方案1:极简写法(推荐)
无需提前拆分字段或创建空列,一行代码即可生成目标列:
import pandas as pd # 先将Date字段转为日期格式 dataset3['Date'] = pd.to_datetime(dataset3['Date']) # 直接生成Weekend列:周六对应dayofweek=5、周日对应6,布尔值转int后自动对应1和0 dataset3['Weekend'] = (dataset3['Date'].dt.dayofweek >= 5).astype(int)
方案2:修正原有写法(适配你的原有逻辑)
如果你要沿用分步处理的逻辑,修改后代码如下:
dataset3['Date'] = pd.to_datetime(dataset3['Date']) # 把星期数值存储到单独的Day列,避免覆盖原日期字段 dataset3['Day'] = dataset3.Date.dt.dayofweek # 用loc做安全赋值,直接和整数比较,不需要提前创建Weekend空列 dataset3.loc[dataset3.Day <= 4, 'Weekend'] = 0 dataset3.loc[dataset3.Day >= 5, 'Weekend'] = 1
内容的提问来源于stack exchange,提问作者PassaroBagante
相关产品推荐
相关产品推荐

