是否可以将大熊猫的日期时间转换为工作日/周末和季节?

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')

以上是关于是否可以将大熊猫的日期时间转换为工作日/周末和季节?的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框中将纪元列值转换为时间

熊猫:将 dtype 'object' 转换为 int

我找不到将熊猫时间戳转换为 matplotlib 图的日期的方法

如何将日期时间格式转换为分钟 - 熊猫

熊猫将带有年份整数的列转换为日期时间

将熊猫系列时间戳转换为唯一日期列表