我需要将大数据集导入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行中有一个不完整的产品,我要避免分成两块。
答案 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()