Правильно, что у pyarrow / parquet есть ограничение не хранить двумерные массивы.
Но паркет (и стрелка) поддерживают вложенные списки, и вы можете представить двумерный массив в виде списка списков (или в python массив массивов или список массивов тоже подойдет).Поэтому одним из вариантов может быть преобразование ваших 2D-массивов в такой формат.
Пример работы таких вложенных списков / массивов:
In [2]: df = pd.DataFrame(
...: {'a': [[np.array([1, 2, 3]), np.array([4, 5, 6])],
...: [np.array([3, 4, 5]), np.array([6, 7, 8])]]})
In [3]: df.to_parquet('test_nested_list.parquet')
In [4]: res = pd.read_parquet('test_nested_list.parquet')
In [5]: res['a']
Out[5]:
0 [[1, 2, 3], [4, 5]]
1 [[1, 2], [3, 4, 5]]
Name: a, dtype: object
In [6]: res['a'].values
Out[6]:
array([array([array([1, 2, 3]), array([4, 5, 6])], dtype=object),
array([array([3, 4, 5]), array([6, 7, 8])], dtype=object)],
dtype=object)