python计算节假日,工作日,周末 以及eval函数解析

  • Post author:
  • Post category:python


1.日期-节假日-星期

计算与节假日,以及工作日,周末属性相关的一些指标,代码如下

import pandas as pd
import argparse
from workalendar.asia import China # 节假日计算包

def date_to_week(start_time, end_time):
    # 把时间列标准化时间格式
    df = pd.DataFrame()
    df['date'] = pd.date_range(start=start_time, end=end_time)
    df['dayofweek'] = df['date'].dt.dayofweek + 1 # 星期为 1-7
    df['date'] = df['date'].map(lambda x: x.strftime('%Y%m%d'))
    return df


def cal_festival(year):
    cal = China()
    lis = []
    if type(year) != list:   # eval函数就是实现list、dict、tuple与str之间的转化
        year = eval(year)
    for ye in year:
        for x, v in cal.holidays(ye):
            lis.append([str(x).replace('-', ''), v])
    lis.append(['20190504', 'Labour Day Holiday'])
    df = pd.DataFrame(data=lis, columns=['date', 'festival'])
    return df


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="input command  below,you can define fixed parameter to execute:\n python3 date_from.py -st '20180101' -et '20191231' -y [2018,2019]")
  	parser.add_argument('-st', '--start_time', dest='start_time', default='20180101', help='define start_time')
    parser.add_argument('-et', '--end_time', dest='end_time', default='20191231', help='define end_time')
    parser.add_argument('-y', '--year', dest='year', default=[2018, 2019], help='define year default =[2018,2019]')

    args = parser.parse_args()
    start_time = args.start_time
    end_time = args.end_time
    year = args.year
    df1 = date_to_week(start_time, end_time)
    df2 = cal_festival(year)
    df = pd.merge(df1, df2, how='left', on='date')
    # print(df)

2 代码部分知识点解析

2.1 eval函数

eval函数用来执行一个字符串表达式,并返回表达式的值。本质是实现list、dict、tuple与str之间的转化。

2.1.1字符串转换成列表(list)

a = "[[1,2], [2,3], [1,0], [3,1], [4,8]]"
print(type(a))
b = eval(a)
print(b)

2.1.2 字符串转换成字典(dict)

a = "{1: 'a', 2: 'b'}"
print(type(a))
b = eval(a)
print(type(b))
print(b)

在这里插入图片描述

2.1.3 字符串转换为元祖(tuple)

a = "([1,0], {'A':2},(9,0))"
print(type(a))
b = eval(a)
print(type(b))
print(b) 

在这里插入图片描述

2.2 后端执行代码示例

python3 date_from.py # 执行这个会按照默认参数执行
python3 date_from.py -h #执行这个会显示 帮助说明,指导那些变量是可以通过重新赋值得到想要的结果
python3 date_from.py -st '20190101' -et '20191231' -y [2018,2019] # 给需要传参的参数重新赋值
python3 date_from.py -et '20190101'  # 当然你也可以只给部分参数赋值


Edited by Eshter


Email:fang_yuu1992@126.com


版权归Eshter所有,撰于 2019/7/10



版权声明:本文为u012513618原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。