微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Dask DataFrame和Pandas有效地读取Timeseries CSV数据的目录

我有一个时间序列数据目录存储为CSV文件,每天一个文件.如何使用Dask DataFrame有效地加载和处理它?

免责声明:我维护dask.这个问题在其他渠道中经常出现,我决定在StackOverflow上添加一个问题,我可以在将来向人们指出.

最佳答案:

简单解决方

如果你只想快速获得一些东西,那么使用一个globstring为路径简单地使用dask.dataframe.read_csv就足够了:

import dask.dataframe as dd
df = dd.read_csv('2000-*.csv')

关键字参数

dask.dataframe.read_csv函数支持大多数pandas.read_csv关键字参数,因此您可能需要稍微调整一下.

df = dd.read_csv('2000-*.csv', parse_dates=['timestamp'])

设置索引

如果目标列是索引,则许多操作(如groupbys,连接,索引查找等)可能更有效.例如,如果将timestamp列作为索引,那么您可以轻松快速查找特定范围的值,或者您可以随时间有效地与其他数据帧连接.这里的节省可以很容易地达到10倍.

天真的方法是使用set_index方法

df2 = df.set_index('timestamp')

但是,如果您知道新索引列已排序,则可以通过传递sorted = True关键字参数来加快速

df2 = df.set_index('timestamp', sorted=True)

分部

在上面的例子中,我们仍然通过数据一次找到好的断点.但是,如果您的数据已经很好地分段(例如每天一个文件),那么您可以将这些除法值赋予set_index以避免此初始传递(这对于大量CSV数据来说可能是昂贵的.

import pandas as pd
divisions = tuple(pd.date_range(start='2000', end='2001', freq='1D'))
df2 = df.set_index('timestamp', sorted=True, divisions=divisions)

解决方案正确且廉价地将时间戳列设置为索引(允许将来进行有效计算).

转换为其他格式

CSV是一种普遍且方便的格式.然而它也很慢.其他格式如Parquet可能会让您感兴趣.它们可以轻松快10倍到100倍.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐