簡體   English   中英

使用Dask DataFrame和Pandas有效地讀取時間序列CSV數據目錄

[英]Read Directory of Timeseries CSV data efficiently with Dask DataFrame and Pandas

我有一個時間序列數據目錄存儲為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倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM