#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
andy
вitertools.product(df, x,y)
будут столбцыbetas
иthetas
?2. Используйте библиотеку dask
3. Предполагая, что вы имеете дело с числами двойной точности, минимальный объем памяти, который это займет, равен 8*100*100*100*100*100 байты, или около 80 ГБ. Если это умещается в памяти на вашем компьютере (эмпирическое правило заключается в том, что pandas, как правило, требует вдвое большего объема памяти, чем необработанный массив NumPy, занимаемый для его операций), у вас все должно получиться. В противном случае вам придется выполнять свою операцию пакетно, характер которой будет зависеть от того, что вы хотите сделать со своими данными впоследствии.