Относительно добавленной ошибки:
ast.literal_eval(my_string_array)
....
[[[205 60 145]
^
SyntaxError: invalid syntax
literal_eval
работает на ограниченном подмножестве синтаксиса Python. Например, он будет работать с допустимым вводом списка, например, "[[205, 60, 145]]"
. Но строка в сообщении об ошибке не соответствует этому; пропущены запятые. str(an_array)
пропускает запятые. str(an_array.tolist())
нет.
В большинстве ответов, касающихся загрузки csv
файлов, например, подчеркивается, что вам потребуется заменить пробелы (или пустые разделители) запятыми.
Таким образом, в данном случае ошибка не имеет ничего общего с массивом 3d.
Позвольте мне проиллюстрировать:
make 3d array:
In [720]: arr = np.arange(24).reshape(2,3,4)
In [722]: arr
Out[722]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
Это str
представление, которое, вероятно, pandas
пишет в CSV:
In [723]: str(arr)
Out[723]: '[[[ 0 1 2 3]\n [ 4 5 6 7]\n [ 8 9 10 11]]\n\n [[12 13 14 15]\n [16 17 18 19]\n [20 21 22 23]]]'
Сравните это с тем, как выглядит список str:
In [724]: arr.tolist()
Out[724]:
[[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]],
[[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]
In [725]: str(arr.tolist())
Out[725]: '[[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]'
literal_eval
не имеет проблем с этой строкой тройного вложенного списка:
In [726]: ast.literal_eval(_)
Out[726]:
[[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]],
[[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]
literal_eval
, примененный к строке массива, приводит к вашей ошибке:
In [727]: ast.literal_eval(Out[721])
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-727-700e3f960e29>", line 1, in <module>
ast.literal_eval(Out[721])
File "/usr/lib/python3.6/ast.py", line 48, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.6/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
[[[ 0 1 2 3]
^
SyntaxError: invalid syntax
Я мог бы исправить это с парой строковых подстановок, эффективно преобразующих Out[721]
в Out[725]
.
@ Mad указал, что если массив достаточно большой (более 1000 элементов), str
создаст сжатую версию, заменяя большую часть значения с «...». Вы можете убедиться в этом сами. Если это так, никакое количество редактирования строк не решит проблему. Эта строка бесполезна.
В как читать numpy 2D массив из строки? , мой ответ имеет ограниченные значения, так как у вас уже есть строка. { ссылка } лучше. У меня также ТАК вопросы, которые конкретно касаются строк, которые появляются в pandas
csv. В любом случае вам нужно обратить внимание на детали строки, особенно на разделители и специальные символы.