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 版权协议,转载请附上原文出处链接和本声明。