python計算節假日,工作日,週末 以及eval函數解析

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:[email protected]
版權歸Eshter所有,撰於 2019/7/10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章