включать запятые в строки при сохранении to_csv - pandas - PullRequest
0 голосов
/ 07 апреля 2020
df1 = pd.DataFrame({'x':'ble','y':[[1,2]]})
df2 = pd.DataFrame({'x':'bla','y':[np.array([1,2])]})

df1.to_csv('df1.csv', sep='\t')
df2.to_csv('df2.csv', sep='\t')

df1.csv сохранит запятые

x   y
ble [1, 2]

, но df2.csv не

x   y
bla [1 2]

, затем кадры данных объединяются (df3.csv)

x   y
ble [1,2]
bla [1 2]

Я прочитал df3.csv позже в python и преобразовал y обратно в списки с ast._literal_eval, но это не сработает для второй строки. Могу ли я как-то сказать to_csv включать запятые независимо от того, является ли это список python или массив numpy?

1 Ответ

0 голосов
/ 07 апреля 2020

Вы просто видите разницу в представлении 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. Хранение списков или массивов в элементе - это дополнительный уровень вложенности, который не подходит этому формату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...