Этот конвертер работает? Тогда я бы предложил придерживаться этого.
Исходный DF имеет столбец типа dtype, содержащий списки различного размера. Сохранение записывает версию этих списков str
. Ваш преобразователь создает массив
In [155]: np.fromstring("[1,2,3]"[1:-1], sep=", ", dtype=int)
Out[155]: array([1, 2, 3])
eval
(или «более безопасный» ast
эквивалент) создает список:
In [156]: eval("[1, 2, 3]")
Out[156]: [1, 2, 3]
Остерегайтесь, если у оригинала вместо массивов были массивы списки, строка не будет работать так же хорошо.
In [157]: str(_155)
Out[157]: '[1 2 3]'
Отсутствует удобная запятая. И что еще хуже, он может содержать ...
, если массив достаточно большой.
Это часто встречается, часто потому, что люди непреднамеренно сохраняют фрейм с этими элементами списка или массива. До сих пор я не видел симпатичной альтернативы - по крайней мере, если вам нужен читабельный csv.
В какой-то степени кадр данных с элементами списка или массива является аберрацией. Столбец dtype будет объектным, и быстрые numpy операции невозможны. Но pandas также использует объект dtype для строк.
Также со списками разной длины вы не можете создать массив nd. Это может быть только список или массив dtype объекта. Скорость вычисления массива чисел c исчезла.