大时间序列数据集上不同大小的块

时间:2019-09-27 11:57:34

标签: python pandas dask

我需要将大数据集导入pandas数据框中,以便进行一些数据操作。

我发现一个好的方法是:

  • 使用分块来加载和处理分块的数据帧。分解任务,分别处理不同的部分,以后再组合。

如果我定义的块大小等于1000:

pd.read_sql_query(sql=query, con=engine, chunksize=1000)

循环的每次迭代都将1000行读入一个数据帧。

但是,我的数据框有一个DATE列,我需要确保每个块都包含每个产品(SKU列)的整个时间序列(DATE列)。

  DATE     STORE   COD  SKU  UNITS_SOLD
2018-02-01  HD01    CD  70  539.000
2018-03-01  HD01    CD  70  511.000
2018-04-01  HD01    CD  70  468.000
2018-05-01  HD01    CD  70  447.000
2018-06-01  HD01    CD  70  382.000
2018-07-01  HD01    CD  70  348.000
2018-02-01  HA01    CD  80  539.000
2018-03-01  HA01    CD  80  511.000
2018-04-01  HA01    CD  80  468.000
2018-05-01  HA01    CD  80  447.000
2018-06-01  HA01    CD  80  382.000
2018-07-01  HA01    CD  80  348.000

确保每个块都将返回整个产品历史记录的最佳方法是什么? 如果在这1000行中有一个不完整的产品,我要避免分成两块。

2 个答案:

答案 0 :(得分:1)

您可能应该在发送的SQL中使用groupby,这意味着您将需要遍历SKU的所有可能值。如果您首先在服务器端设置了一个以这种方式显式排序数据的视图,则可以使用分块。

答案 1 :(得分:0)

如果您想使用时间序列,我认为使用块不是正确的方法。您应该使用groupby,然后应用所需的分析。在pandas / dask中基本上是相同的。假设您只想拥有每个sku的商店数量

import dask.dataframe as dd
import pandas as pd

df = dd.read_csv("file.csv") 
out = df.groupby('SKU')["STORE"].nunique().compute()