Ограничения на размер фрейма данных

#python #pandas #dataframe #bigdata

#python #pandas #фрейм данных #bigdata

Вопрос:

Я работаю над проблемой физики, которая требует массивного фрейма данных pandas, возможно, это не лучший вариант.

В принципе, мне нужно выполнить вычисление с 3 входными данными для множества разных наборов этих входных значений.

Мой входной фрейм данных выглядит следующим образом:

 betas  = np.linspace(0,np.deg2rad(10),100)
thetas = np.linspace(0,np.deg2rad(10),100)
z = np.linspace(0,2,100)

df =  pd.DataFrame(list(product(betas, thetas, z)), columns=['Beta', 'Theta', 'z'])
  

И для каждой строки мне нужно запустить вычисление, которое выдает массив размером 100×100 (координаты x, y).

Если я наивно также использую itertools.product(df, x,y) , у него заканчивается память.

Должен ли я перебирать каждую строку в моем вводе df ? Или я могу сохранить выходной массив размером 100×100 (или 10000) для каждой строки в df ?

Есть ли способ лучше?

Возможный вывод может быть:

df:

 beta theta z RESULT
0.1   0.1  2  (0, ... , 9999)
...
{million rows like this}
  

Большое вам спасибо,
дайте мне знать, если я смогу предоставить более подробную информацию

Комментарии:

1. В этом случае x and y в itertools.product(df, x,y) будут столбцы betas и thetas ?

2. Используйте библиотеку dask

3. Предполагая, что вы имеете дело с числами двойной точности, минимальный объем памяти, который это займет, равен 8*100*100*100*100*100 байты, или около 80 ГБ. Если это умещается в памяти на вашем компьютере (эмпирическое правило заключается в том, что pandas, как правило, требует вдвое большего объема памяти, чем необработанный массив NumPy, занимаемый для его операций), у вас все должно получиться. В противном случае вам придется выполнять свою операцию пакетно, характер которой будет зависеть от того, что вы хотите сделать со своими данными впоследствии.