提高大数据量pd.date\u范围迭代的性能时间

2024-09-30 20:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的日期数据集,我试图计算每个月的天数。以下是数据集中的示例:

                LoadDate            DischDate
87364    01/07/2017 00:22:16  16/07/2017 08:10:55
745999   08/06/2017 19:38:06  12/06/2017 15:20:59
1870836  17/02/2018 19:51:15  10/04/2018 03:53:57
436131   17/11/2015 00:00:17  06/01/2016 11:00:01
984437   26/11/2016 14:48:47  15/12/2016 18:39:54

使用下面的代码,我能够找出天数,但是输出是四舍五入的,所以不是例如显示;在3月18日花费了10.86天,它将产出11天

dates.join(dates.apply(lambda x: pd.Series(pd.date_range(x.LoadDate, 
x.DischDate, freq='D')).dt.strftime('%m-%y'),1)
     .apply(lambda x: x.value_counts(),1)
     .rename(columns=lambda x: pd.to_datetime(x, format='%m-%y').strftime('%b-%y')))

我将上面pd.date\u range公式中的频率从freq='D'改为freq='T',以计算分钟数,然后除以1440,以获得准确的天数。然而,这个过程非常耗时,即使是在数据集的一个小样本上,而且根本不具有可伸缩性

变更后的eg代码:

dates.join(dates.apply(lambda x: pd.Series(pd.date_range(x.LoadDate, 
x.DischDate, freq='T')).dt.strftime('%m-%y'),1)
     .apply(lambda x: x.value_counts(),1)
     .rename(columns=lambda x: pd.to_datetime(x, format='%m-%y').strftime('%b-%y'))/1440)

我应该如何改进这段代码的性能,并能够将其扩展到1.1gb大小的数据集

非常感谢你的帮助

你知道吗-- 黑曼巴


Tags: 数据lambda代码daterangeseriespddates