Куски разных размеров на большом наборе данных временных рядов - PullRequest
2 голосов
/ 27 сентября 2019

Мне нужно импортировать большой набор данных в фрейм данных pandas, чтобы выполнить некоторые манипуляции с данными.

Я обнаружил, что хорошим способом сделать это будет:

  • Использованиеразделение на части для загрузки и обработки фреймов данных в чанках. Разбиение задачи, обработка отдельных частей по отдельности и их последующее объединение.

Если я определю размер фрагмента, равный 1000:

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

Каждая итерация цикла читает 1000 строк в кадре данных.

Однако мой фрейм данных имеет столбец DATE, и я должен быть уверен, что каждый блок содержит полный временной ряд (столбец DATE) каждого продукта (столбец SKU).

  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 части.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы, вероятно, должны использовать groupby в отправляемом SQL, что означает, что вам нужно будет перебрать все возможные значения SKU.Вполне возможно, что вы могли бы использовать chunking, если сначала создали представление на стороне сервера, которое явно упорядочивает данные таким образом.

0 голосов
/ 27 сентября 2019

Если вы хотите работать с сериями времени, я не думаю, что использование кусков - это правильный подход.Вы должны использовать groupby, а затем применить анализ, который вам нравится.в пандах / дасках это в основном то же самое.Допустим, вы хотите просто иметь номер магазина для каждого sku

import dask.dataframe as dd
import pandas as pd

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