Попытка воспроизвести ваш CSV-файл
In [131]: arr = np.arange(10) # a flat array
In [132]: arr = np.array(arr).T
In [133]: arr
Out[133]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Я начинаю с плоского файла и все еще имею плоский (.T
в массиве 1d ничего не делает)
In [135]: with open('out.csv','a') as f:
...: writer = csv.writer(f)
...: writer.writerow(['id'])
...: writer.writerow(arr.T)
...:
In [136]: cat out.csv
id
0,1,2,3,4,5,6,7,8,9
Каждый вызов writerow
записывает строку, как следует из названия.
Но с помощью savetxt
я могу легко написать двумерный массив в аккуратных столбцах и строках:
In [137]: np.savetxt('out.csv', arr.reshape(5,2), delimiter=',')
In [138]: cat out.csv
0.000000000000000000e+00,1.000000000000000000e+00
2.000000000000000000e+00,3.000000000000000000e+00
4.000000000000000000e+00,5.000000000000000000e+00
6.000000000000000000e+00,7.000000000000000000e+00
8.000000000000000000e+00,9.000000000000000000e+00
In [139]: np.savetxt('out.csv', arr.reshape(5,2), delimiter=',', fmt='%5d')
In [140]: cat out.csv
0, 1
2, 3
4, 5
6, 7
8, 9
Микшированиетекст и числа немного сложнее.
Я могу записать две переменные в одну строку, просто поместив их в список:
In [143]: with open('out.csv','w') as f:
...: writer = csv.writer(f)
...: writer.writerow(['id', arr])
...:
...:
In [144]: cat out.csv
id,[0 1 2 3 4 5 6 7 8 9]
То, что на самом деле сделано:
f.writeline('%s,%s'%(id, arr))
то есть отформатируйте список как строки и напишите.