use*_*756 11 python datetime date dataframe pandas
我有一个数据框 df,有 3 列:年、月和日期。我想使用此信息来确定该日期是周末还是工作日以及是一周中的哪一天。
我试图使用下面的代码来确定是周末还是工作日,但它不起作用
from datetime import datetime
from datetime import date
def is_weekend(d = datetime.today()):
return d.weekday() > 4
Run Code Online (Sandbox Code Playgroud)
df['weekend'] = df.apply(lambda x: is_weekend(date(x['Year'], x['Month'], x['Day'])), axis=1)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
TypeError: cannot convert the series to <class 'int'>
Run Code Online (Sandbox Code Playgroud)
除此之外,我如何知道这个日期是否是一周中的哪一天。
Mus*_*dın 24
您可以首先dates从Year、Month和Day列组成一个系列:
dates = pd.to_datetime({"year": df.Year, "month": df.Month, "day": df.Day})
Run Code Online (Sandbox Code Playgroud)
然后你可以检查dayofweek(注意dt它之前的访问器):
df["Day of Week"] = dates.dt.dayofweek
Run Code Online (Sandbox Code Playgroud)
并用你的逻辑形成is_weekend专栏:
df["Is Weekend"] = dates.dt.dayofweek > 4
Run Code Online (Sandbox Code Playgroud)
我们不再需要它了apply,因为我们有一个统一的dates系列,并且它支持这种一次性比较。
我们以一种可读的、不言自明的方式来做怎么样?
dates = pd.to_datetime({"year": df.Year, "month": df.Month, "day": df.Day})
df["Is Weekend"] = dates.dt.day_name().isin(['Saturday', 'Sunday'])
Run Code Online (Sandbox Code Playgroud)