pandas100个骚操作:使用 Datetime 提速 50 倍运行速度!

简介: 本篇是pandas100个骚操作系列的第 10 篇:使用 Datetime 提速 50 倍运行速度!

大家好,我是东哥。
本篇是pandas100个骚操作系列的第 10 篇:使用 Datetime 提速 50 倍运行速度!系列内容,请看👉「pandas100个骚操作」话题,订阅后文章更新可第一时间推送至订阅号。


平时我们运行pandas少不了和时间打交道,而大多情况下许多朋友都是暴力解决问题,直接让pandas自己转换和处理。

对于平时的学习和小测试是没什么问题的,但当跑一些大数据的时候往往会非常的慢,而这个时间性能其实是完全可以优化的。

本次东哥介绍一个非常简单的操作,使用Datetime变换时间类型,让你的代码运行速度飞速提升。

下面,我们来看一个例子。

# 导入数据集
>>> df = pd.read_csv('demand_profile.csv')
>>> df.head()
     date_time  energy_kwh
0  1/1/13 0:00       0.586
1  1/1/13 1:00       0.580
2  1/1/13 2:00       0.572
3  1/1/13 3:00       0.596
4  1/1/13 4:00       0.592

从运行上面代码得到的结果来看,好像没有什么问题。但实际上pandasnumpy都有一个 dtypes 的概念。如果没有特殊声明,那么date_time将会使用一个 objectdtype 类型,如下面代码所示:

>>> df.dtypes
date_time      object
energy_kwh    float64
dtype: object
>>> type(df.iat[0, 0])
str

object类型像一个大的容器,不仅仅可以承载 str,也可以包含那些不能很好地融进一个数据类型的任何特征列。而如果我们将日期作为 str类型就会极大的影响效率。因此,对于时间序列的数据而言,我们需要让上面的date_time列格式化为datetime对象数组(pandas称之为时间戳)。pandas在这里操作非常简单,操作如下:

>>> df['date_time'] = pd.to_datetime(df['date_time'])
>>> df['date_time'].dtype
datetime64[ns]

我们来运行一下这个df看看转化后的效果是什么样的。

>>> df.head()
               date_time    energy_kwh
0    2013-01-01 00:00:00         0.586
1    2013-01-01 01:00:00         0.580
2    2013-01-01 02:00:00         0.572
3    2013-01-01 03:00:00         0.596
4    2013-01-01 04:00:00         0.592

date_time的格式已经自动转化了,但这还没完,在这个基础上,我们还是可以继续提高运行速度的。如何提速呢?为了更好的对比,我们首先通过timeit装饰器来测试一下上面代码的转化时间。

>>> @timeit(repeat=3, number=10)
... def convert(df, column_name):
...     return pd.to_datetime(df[column_name])
>>> df['date_time'] = convert(df, 'date_time')
Best of 3 trials with 10 function calls per trial:
Function `convert` ran in average of 1.610 seconds.

1.61s,看上去挺快,但其实可以更快,我们来看一下下面的方法。

>>> @timeit(repeat=3, number=100)
>>> def convert_with_format(df, column_name):
...     return pd.to_datetime(df[column_name],
...                           format='%d/%m/%y %H:%M')
Best of 3 trials with 100 function calls per trial:
Function `convert_with_format` ran in average of 0.032 seconds.

结果只有0.032s,快了将近50倍。原因是:我们设置了转化的格式format。由于在CSV中的datetimes并不是ISO 8601格式的,如果不进行设置的话,那么pandas将使用dateutil包把每个字符串str转化成date日期。相反,如果原始数据datetime已经是ISO 8601格式了,那么pandas就可以立即使用最快速的方法来解析日期。这也就是为什么提前设置好格式format可以提升这么多。当然,这个只是在时间处理上的一个提速小操作,下一篇将会介绍一个更常用的牛逼提速方法。以上就是本次分享。如果喜欢东哥的骚操作,请给我点个赞和在看

相关文章
|
2月前
|
数据采集 监控 数据挖掘
CSV文件自动化生成:用Pandas与Datetime高效处理京东商品信息
在电商竞争激烈的背景下,实时掌握商品价格和库存信息至关重要。本文介绍如何使用Python的`pandas`和`datetime`库从京东抓取商品名称、价格等信息,并生成CSV文件。结合代理IP技术,提升爬取效率和稳定性。通过设置请求头、使用代理IP和多线程技术,确保数据抓取的连续性和成功率。最终,数据将以带时间戳的CSV文件形式保存,方便后续分析。
|
6月前
|
数据处理 索引 Python
Pandas的datetime数据类型(二)
Pandas的datetime数据处理涉及日期运算和Timedelta计算,如计算疫情爆发天数,获取日期的季度和年份。示例中展示如何从Ebola数据集重建疫情爆发第一天,以及如何对银行关闭日期分组统计。此外,演示了如何按日期筛选数据,设置日期为DataFrame索引,并使用`date_range`创建日期序列。还讨论了如何处理不连续日期,以及如何进行时间范围查询,包括在特定时间段内选择数据和按时间间隔过滤。最后,展示了如何高效地在时间序列上选取数据。
|
6月前
|
Python
Pandas的datetime数据类型(一)
Python中内置了`datetime`模块,用于处理日期和时间。可以使用`datetime.now()`获取当前时间,或通过`datetime(year, month, day)`创建指定日期。在Pandas中,`pd.to_datetime()`函数用于将数据转换为`Timestamp`或`DatetimeIndex`,如从CSV加载数据时转换日期列。此外,`pd.read_csv()`的`parse_dates`参数可以直接将指定列解析为日期类型。Pandas的`Timestamp`对象还允许提取年、月、日等部分。
|
7月前
|
存储 传感器 监控
Pandas DateTime 超强总结
Pandas DateTime 超强总结
|
数据可视化 数据挖掘 Python
python pandas 宝可梦数据分析可视化实战 课程设计 完整代码+数据 可直接运行
python pandas 宝可梦数据分析可视化实战 课程设计 完整代码+数据 可直接运行
101 0
|
存储 传感器 监控
Pandas DateTime 超强总结
Pandas DateTime 超强总结
Pandas DateTime 超强总结
|
数据挖掘 数据处理 数据格式
Pandas 数据处理 | Datetime 时间模块在 Pandas 中的使用
Datatime 作为 Python 中的时间模块类型,处理时间有关数据是非常方便的, Pandas 作为数据分析程序包同样也支持 DataTime 数据机制
Pandas 数据处理 | Datetime 时间模块在 Pandas 中的使用
|
存储 SQL 数据挖掘
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
1034 0
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
|
1月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
68 0