是否可以将大熊猫的日期时间转换为工作日/周末和季节?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以将大熊猫的日期时间转换为工作日/周末和季节?相关的知识,希望对你有一定的参考价值。
我有一个熊猫数据框,如果它的列是日期时间格式(year-month-day
)。有什么方法可以创建一个周末或工作日的新列,以及一个表示什么季节的新列?更好的是(但这似乎要复杂得多,因此不是完全必要的)还取决于是否是联邦假日(美国)。
例如,日期为2019-10-23的实例为星期三,因此我想创建一个名为day_type
的列,该列填充“工作日”,一个名为season
的列中填充“秋季”。
答案
strftime很容易:
import pandas as pd
df = pd.DataFrame('string_date': ['2019-10-23', '2019-10-24', '2019-10-23'])
df['date'] = pd.to_datetime(df['string_date'], format='%Y-%m-%d', errors='ignore')
df['day_of_week'] = df['date'].dt.strftime('%A')
结果1:
string_date date day_of_week
0 2019-10-23 2019-10-23 Wednesday
1 2019-10-24 2019-10-24 Thursday
2 2019-10-23 2019-10-23 Wednesday
要添加季节,您可以使用以下公式:Link
df['season'] = (df['date'].dt.month%12 + 3)//3
结果2:
string_date date day_of_week season
0 2019-10-23 2019-10-23 Wednesday 4
1 2019-10-24 2019-10-24 Thursday 4
2 2019-10-23 2019-10-23 Wednesday 4
Strftime参考:http://strftime.org/
另一答案
我编写了一个函数,该函数以'yyyy-mm-dd'的形式接收字符串参数,并返回一个季节和星期几的元组。请根据需要修改功能。
from datetime import date, datetime
def date_week(date_str):
"""
this method returns season and day of week tuple from str
arg in the format 'yyyy-mm-dd'
"""
datetime_obj = datetime.strptime(date_str, '%Y-%m-%d')
weekdays = 0:'monday',
1:'tuesday',
2:'wednesday',
3:'thursday',
4:'friday',
5:'saturday',
6:'sunday'
day_of_week = weekdays[datetime_obj.weekday()] # returns day of week
Y = 2000 # dummy leap year to allow input X-02-29 (leap day)
seasons = [('winter', (date(Y, 1, 1), date(Y, 3, 20))),
('spring', (date(Y, 3, 21), date(Y, 6, 20))),
('summer', (date(Y, 6, 21), date(Y, 9, 22))),
('autumn', (date(Y, 9, 23), date(Y, 12, 20))),
('winter', (date(Y, 12, 21), date(Y, 12, 31)))]
if isinstance(datetime_obj, datetime):
datetime_obj = datetime_obj.date()
datetime_obj = datetime_obj.replace(year=Y)
season = next(season for season, (start, end) in seasons
if start <= datetime_obj <= end) # returns season
return day_of_week, season
如果我们调用date_week("2019-10-23")
,它将返回('wednesday', 'autumn')
以上是关于是否可以将大熊猫的日期时间转换为工作日/周末和季节?的主要内容,如果未能解决你的问题,请参考以下文章