我有一个时间序列数据目录存储为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倍.
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] 举报,一经查实,本站将立刻删除。