使用.weekday()筛选DataFrame周末行报错,如何正确筛选?
筛选DataFrame中周六周日行的正确方法
错误原因
你遇到的AttributeError: 'Series' object has no attribute 'weekday',是因为直接对Pandas Series调用了weekday()方法或访问weekday属性——这是Python原生datetime对象的用法,而Pandas的日期型Series需要通过.dt访问器来调用日期相关属性/方法。另外,你用了Python的or运算符,这不适用于Series的元素级逻辑判断,要改用|。
正确步骤
- 确保日期列是datetime类型(如果你的
dateRep还没转成datetime的话):
import pandas as pd df['dateRep'] = pd.to_datetime(df['dateRep'])
- 筛选周六(weekday=5)和周日(weekday=6)的行
两种写法都可以:
- 方法一:用
isin更简洁
weekend_df = df.loc[df['dateRep'].dt.weekday.isin([5, 6])]
- 方法二:显式逻辑或
weekend_df = df.loc[(df['dateRep'].dt.weekday == 5) | (df['dateRep'].dt.weekday == 6)]
关键注意点
- 必须使用
.dt访问器:它是Pandas专门用来对日期时间型Series进行元素级操作的接口,能调用weekday、year、month等日期属性。 - 逻辑判断用
|而非or:or是全局布尔判断,|是逐元素的逻辑或,符合Series的运算规则。
内容的提问来源于stack exchange,提问作者krmbla
相关产品推荐
相关产品推荐

