В Python 3 я пытаюсь сгенерировать последовательность в этом формате из 4 списков
<yyyymmdd>-<1-200>-<1-20>-<1-13000>
20161201-1-1-1
20161201-1-1-2
20161201-1-1-3
..
..
20161201-1-2-1
20161201-1-2-2
..
..
20161201-2-1-1
20161201-2-1-2
..
20161202-1-1-1
20161202-1-1-2
..
..
20190701-200-20-13000
первый список находится в диапазоне дат <yyyymmdd to yyyymmdd>
, остальные 3 списка находятся в диапазонах <1-200> <1-20> and <1-13000>
.
Все значения списка представлены в формате str.
Теперь я пытаюсь сделать следующее:
import itertools
import pandas as pd
all_dates = [d.strftime('%Y%m%d') for d in pd.date_range('20160119','20191226')]
all_users = list(range(0,200))
all_products = list(range(0,15))
all_customers = list(range(0,13000))
date_user_product_map = []
date_user_product_customer_map = []
for pair in itertools.product(all_dates,all_users, all_products):
date_user_product_map.append('-'.join(pair))
for pair in itertools.product(date_user_product_map,all_customers):
date_user_product_customer_map.append('-'.join(pair))
Первая конкатенация из 3 списков выполняется быстро имало памяти.Вторая конкатенация просто занимает огромную память и уничтожается.
Я пытался запустить ее и на 48-гигабайтной системе ОЗУ, но, похоже, для ее запуска недостаточно памяти.
Мне нужна помощь в решении этой проблемы, а также понимание того, почему для этого требуется столько памяти.Что я здесь не так делаю?
ОБНОВЛЕНИЕ: (мое требование)
Итак, у меня есть пара информационных фреймов, в которых есть несколько столбцов, значения которыхв формате - <1-200> - <1-20> - <1-13000>, который занимает много места И, следовательно, я хочу создать список всех возможных значений, а затем перечислить и создать словарькак показано ниже:
- <1-200> - <1-20> - <1-13000>
20161201-1-1-1: 0 20161201-1-1-2:1 20161201-1-1-3: 2 .. .. 20190701-200-20-12999: n-1 20190701-200-20-13000: n
и затем замените значения кадров данных на 1, 2 ... n, n-1.
Есть ли другой способ сделать это?