【问题标题】:Find if Date is weekend or weekday in Pandas DataFrame在 Pandas DataFrame 中查找日期是周末还是工作日
【发布时间】:2021-09-09 23:02:26
【问题描述】:

我有一个数据框 df,它有 3 列:年、月和日期。我想使用这些信息来确定这个日期是在周末还是工作日,以及它是星期几。

我正在尝试使用下面的代码来确定它是周末还是工作日,但它不起作用

from datetime import datetime
from datetime import date

def is_weekend(d = datetime.today()):
  return d.weekday() > 4
df['weekend'] = df.apply(lambda x: is_weekend(date(x['Year'], x['Month'], x['Day'])), axis=1)

我收到此错误:

TypeError: cannot convert the series to <class 'int'>

除此之外,我如何知道这个日期是否在一周中的哪一天。

【问题讨论】:

    标签: python pandas dataframe date datetime


    【解决方案1】:

    您可以先从您的YearMonthDay 列中形成一个dates 系列:

    dates = pd.to_datetime({"year": df.Year, "month": df.Month, "day": df.Day})
    

    然后你可以检查dayofweek(注意前面的dt访问器):

    df["Day of Week"] = dates.dt.dayofweek
    

    并根据您的逻辑形成is_weekend 列:

    df["Is Weekend"] = dates.dt.dayofweek > 4
    

    我们不再需要apply,因为我们有一个统一的dates 系列,它支持这种一次性比较。

    【讨论】:

      【解决方案2】:

      我们以一种可读的、不言自明的方式来做这件事怎么样?

      dates = pd.to_datetime({"year": df.Year, "month": df.Month, "day": df.Day})
      df["Is Weekend"] = dates.dt.day_name().isin(['Saturday', 'Sunday'])
      

      【讨论】:

      • 嗨,上面的代码。我们如何修改它,而不是用 true 或 false 填充 Is Weekend 列,而是用周末或工作日填充它。这样更容易绘制。
      • 对不起,我快速谷歌发现这可以通过 ...df['is_weekend'] = np.where(df['ride_dow'].isin(['Saturday','Sunday' ]), '周末', '工作日')
      • @chucknor 使用 .loc 代替。 df.loc[df['day_of_week'].isin(['Saturday', 'Sunday'], 'weekday_weekend'] = 'weekend'
      • 那行不通。似乎缺少右括号。我跑了 ...df_rides['is_weekend'] = df_rides.loc[df_rides['ride_dow'].isin(['Saturday', 'Sunday']), 'weekday_weekend'] = 'weekend'。所以这用周末填充周六和周日,但是我如何用工作日填充工作日。上面将它们保留为 NaN。
      • mask = df['day_of_week'].isin(['Saturday', 'Sunday'])df.loc[mask, 'col'] = 'val_true'df.loc[~mask, 'col'] = 'val_false'。这是熊猫的方式。虽然np.where 看起来更优雅。不确定它如何比较性能。我怀疑.loc 应该更快,内存效率更高。以备不时之需。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      相关资源
      最近更新 更多