dt.dayofweek 是 pandas 中用于提取日期工作日编号的属性,返回值范围是 0(周一)到 6(周日)。
dt.dayofweek 是什么,返回值范围是多少
是 pandas 中
或
的一个属性,用于提取日期对应的工作日编号。它返回整数,
周一为 0,周日为 6
——这点非常关键,很多人误以为周一是 1 或周日是 0,结果过滤错。
注意:它只对
类型有效;如果列是字符串或 object 类型,直接调用会报
。
使用前务必确认类型:
如何用布尔索引筛选出“周二和周四”的数据
核心就是构造一个布尔条件数组,传给 DataFrame 索引。比如要保留周二(1)和周四(3),写法是:
立即学习
“
Python免费学习笔记(深入)
”;
更简洁的写法是用
:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
必须用
避免 SettingWithCopyWarning(尤其后续要修改新 DataFrame 时)
别用
/
,它们不支持数组运算,会报
用
(或)、
(与)、
(非),且每个条件必须加括号
过滤周末数据时容易忽略的时区和本地化问题
如果原始时间带时区(如
或
),
按照该时区计算——但如果你按“北京时间周末”过滤,而数据是 UTC 时间,那直接用
就会把周六凌晨(UTC)当成周五(北京时间),漏掉或错选。
稳妥做法:
统一转为所需时区再取 weekday:
若原数据无时区,但业务逻辑按某地时间解释,可用
先打上时区,再转换
纯本地时间(无 tz)且不跨时区场景下,可跳过这步
性能差异:dayofweek vs. day_name() + isin
有人喜欢用
,语义清晰但慢很多——因为
返回字符串,涉及本地化、内存拷贝和逐元素比较;而
是 int 数组,底层用 numpy 向量化运算,快 3–5 倍(百万行数据实测)。
另外注意:
默认按系统 locale 返回中文/英文名,跨环境可能不稳定
始终稳定返回 0–6 整数,适合生产环境
如果要做“每月第二个周三”这类复杂逻辑,
是基础,但需配合
或
组合判断
实际用的时候,别光记“周二=1”,先
看一眼分布,比凭空假设靠谱得多。
dt.dayofweekDatetimeIndexSeries.dtdatetime64[ns]AttributeError: Can only use .dt accessor with datetimelike valuesdf['date'].dtype # 应该是 datetime64[ns]
df['date'] = pd.to_datetime(df['date']) # 若非 datetime 类型,必须先转换mask = (df['date'].dt.dayofweek == 1) | (df['date'].dt.dayofweek == 3)
df_filtered = df[mask].copy()isin()df_filtered = df[df['date'].dt.dayofweek.isin([1, 3])].copy().copy()andorValueError: The truth value of a Series is ambiguous|&~UTCAsia/Shanghaidt.dayofweekdayofweek in [5, 6]df['date'].dt.tz_convert('Asia/Shanghai').dt.dayofweektz_localizedf['date'].dt.day_name().isin(['Tuesday', 'Thursday'])day_name()dayofweekday_name()dayofweekdayofweekdt.weekdt.daydf['date'].dt.dayofweek.value_counts().sort_index()