Вы просто видите разницу в представлении str
двух классов:
In [215]: print([1,2])
[1, 2]
In [216]: print(np.array([1,2]))
[1 2]
В одном из ваших тестовых случаев массив встраивается в список с другим представлением:
In [227]: pd.__version__
Out[227]: '0.25.3'
In [228]: df=pd.DataFrame([{'x':'ble','y':[[1,2]]},
...: {'x':'bla','y':[np.array([1,2])]},
...: {'x':'bli','y':np.array([1,2])}
...: ])
In [229]: df
Out[229]:
x y
0 ble [[1, 2]]
1 bla [[1, 2]]
2 bli [1, 2]
In [230]: df.to_csv('test.csv')
In [231]: cat test.csv
,x,y
0,ble,"[[1, 2]]"
1,bla,"[array([1, 2])]"
2,bli,[1 2]
Вы должны to_csv
, но, похоже, у нас нет точного контроля над этим. Помните, csv
предназначен для хранения простых таблиц, строк столбцов. Так же как и DataFrame. Хранение списков или массивов в элементе - это дополнительный уровень вложенности, который не подходит этому формату.