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