加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

还在抱怨Pandas运行速度慢?这几个方法会颠覆你的看法

发布时间:2018-12-20 15:16:11 所属栏目:教程 来源:知乎
导读:前言 当大家谈到数据分析时,提及最多的语言就是Python和SQL。Python之所以适合数据分析,是因为它有很多第三方强大的库来协助,pandas就是其中之一。pandas的文档中是这样描述的: 快速,灵活,富有表现力的数据结构,旨在使关系或标记数据的使用既简单又

通常,在构建复杂数据模型时,可以方便地对数据进行一些预处理。例如,如果您有10年的分钟频率耗电量数据,即使你指定格式参数,只需将日期和时间转换为日期时间可能需要20分钟。你真的只想做一次,而不是每次运行你的模型,进行测试或分析。

你可以在此处执行的一项非常有用的操作是预处理,然后将数据存储在已处理的表单中,以便在需要时使用。但是,如何以正确的格式存储数据而无需再次重新处理?如果你要另存为CSV,则只会丢失datetimes对象,并且在再次访问时必须重新处理它。

Pandas有一个内置的解决方案,它使用 HDF5,这是一种专门用于存储表格数据阵列的高性能存储格式。 Pandas的 HDFStore 类允许你将DataFrame存储在HDF5文件中,以便可以有效地访问它,同时仍保留列类型和其他元数据。它是一个类似字典的类,因此您可以像读取Python dict对象一样进行读写。

以下是将预处理电力消耗DataFrame df存储在HDF5文件中的方法:

  1. # 创建储存对象,并存为 processed_data 
  2. data_store = pd.HDFStore('processed_data.h5') 
  3.  
  4. # 将 DataFrame 放进对象中,并设置 key 为 preprocessed_df 
  5. data_store['preprocessed_df'] = df 
  6. data_store.close() 

现在,你可以关闭计算机并休息一下。等你回来的时候,你处理的数据将在你需要时为你所用,而无需再次加工。以下是如何从HDF5文件访问数据,并保留数据类型:

  1. # 获取数据储存对象 
  2. data_store = pd.HDFStore('processed_data.h5') 
  3.  
  4. # 通过key获取数据 
  5. preprocessed_df = data_store['preprocessed_df'] 
  6. data_store.close() 

数据存储可以容纳多个表,每个表的名称作为键。

关于在Pandas中使用HDFStore的注意事项:您需要安装PyTables> = 3.0.0,因此在安装Pandas之后,请确保更新PyTables,如下所示:

  1. pip install --upgrade tables 

结论

如果你觉得你的Pandas项目不够快速,灵活,简单和直观,请考虑重新考虑你使用该库的方式。

这里探讨的示例相当简单,但说明了Pandas功能的正确应用如何能够大大改进运行时和速度的代码可读性。以下是一些经验,可以在下次使用Pandas中的大型数据集时应用这些经验法则:

  • 尝试尽可能使用矢量化操作,而不是在df 中解决for x的问题。如果你的代码是许多for循环,那么它可能更适合使用本机Python数据结构,因为Pandas会带来很多开销。
  • 如果你有更复杂的操作,其中矢量化根本不可能或太难以有效地解决,请使用.apply方法。
  • 如果必须循环遍历数组(确实发生了这种情况),请使用.iterrows()或.itertuples()来提高速度和语法。
  • Pandas有很多可选性,几乎总有几种方法可以从A到B。请注意这一点,比较不同方法的执行方式,并选择在项目环境中效果最佳的路线。
  • 一旦建立了数据清理脚本,就可以通过使用HDFStore存储中间结果来避免重新处理。
  • 将NumPy集成到Pandas操作中通常可以提高速度并简化语法。

【编辑推荐】

  1. Pandas处理大数据的一些小技巧
  2. 数据处理性能对比(Python原生vs Pandas vs Numpy)
  3. 用Pandas处理大数据——节省90%内存消耗的小贴士
  4. 一行代码,Pandas秒变分布式,快速处理TB级数据
  5. 使用Pandas&NumPy进行数据清洗的6大常用方法
【责任编辑:未丽燕 TEL:(010)68476606】
点赞 0

(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读