这个功能(季节)运行时间太长,为啥?以及如何改进代码?
Posted
技术标签:
【中文标题】这个功能(季节)运行时间太长,为啥?以及如何改进代码?【英文标题】:This function (season) takes too much time to run, why ? and how can I improve the code?这个功能(季节)运行时间太长,为什么?以及如何改进代码? 【发布时间】:2020-04-17 16:27:20 【问题描述】:这个功能(季节)运行时间太长,为什么?以及如何改进代码?
这是函数
def season_of_date(date):
date=pd.to_datetime(date)
x=date.year
year = str(x)
seasons = 'spring': pd.date_range(start='21/03/'+year, end='20/06/'+year),
'summer': pd.date_range(start='21/06/'+year, end='22/09/'+year),
'autumn': pd.date_range(start='23/09/'+year, end='20/12/'+year)
if date in seasons['spring']:
return 'spring'
if date in seasons['summer']:
return 'summer'
if date in seasons['autumn']:
return 'autumn'
else:
return 'winter'
#I applied it to my dataset named dat
data['season'] = data.DateTime.map(season_of_date)
【问题讨论】:
【参考方案1】:很难确切知道发生了什么,因为您没有发布数据框的一些示例行。
如果目标是从名为“DateTime”的列中确定季节,那么我认为下面的代码更有效,因为它避免了不必要地为每一行生成日期范围,然后测试日期是否在该范围内。请注意,如果您使用的是 Python 3.5 或更低版本,则阈值应为 OrderedDict
,因为代码依赖于键顺序。
import datetime
def season_of_date(date):
'''Assuming applied to column with dtype datetimens[64]'''
year = date.year
thresholds = 'autumn': datetime.date(year, 9, 1),
'summer': datetime.date(year, 6, 1),
'spring': datetime.date(year, 3, 1)
for season, threshold in thresholds.items():
if date >= threshold:
return season
return 'winter'
因此,将此函数应用于示例数据集,结果如下
df = pd.DataFrame('dates': pd.date_range('11/21/2019', periods=20, freq='W'))
df['dates'].apply(season_of_date)
0 autumn
1 autumn
2 autumn
3 autumn
4 autumn
5 autumn
6 winter
7 winter
8 winter
9 winter
10 winter
11 winter
12 winter
13 winter
14 spring
15 spring
16 spring
17 spring
18 spring
19 spring
Name: dates, dtype: object
【讨论】:
以上是关于这个功能(季节)运行时间太长,为啥?以及如何改进代码?的主要内容,如果未能解决你的问题,请参考以下文章
【时间序列分析】为啥要做季节调整?对数处理?差分?(理论篇)