Применяя ранее genfromtxt
ответ на этот случай:
txt="""0.3,36.22683698,-115.0466482,1836.255238,0,0,0.2105903662,0.6848089322,41.15086807,2016/3/26,4:35:51
... ..."""
>>> load=np.genfromtxt(txt.splitlines(),dtype=None,delimiter=',')
>>> load.shape
(3,)
>>> load.dtype
dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<i4'), ('f5', '<i4'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<f8'), ('f9', 'S9'), ('f10', 'S7')])
форма является 1d, но dtype
представляет собой соединение, смесь поплавки, Интс и строк - 11 из их.
>>> load[0]
(0.3, 36.22683698, -115.0466482, 1836.255238, 0, 0, 0.2105903662, 0.6848089322, 41.15086807, '2016/3/26', '4:35:51')
>>> load['f0']
array([ 0.3, 0.6, 0.9])
«строк» или записи доступны по количеству, но «» столбцы теперь поля, и доступ к ним по имени (вы можете получить имена из заголовков столбцов CSV, а также, здесь они генерируются автоматически).
>>> load[0]['f4']
0
>>> load[0]['f3']
1836.255238
Отдельные элементы - это доступ по сочетанию номера и имени.
Недостатком этого формата структурированных массивов является то, что способность выполнять математику по столбцам ограничена. Путь вокруг этого состоит в том, чтобы группировать столбцы в другой слой рецептуры.
С помощью этих данных можно определить 5 полей, сочетание поплавка, внутр и строка:
>>> dt=np.dtype('(4)float,(2)int,(3)float,S10,S10')
>>> dt
dtype([('f0', '<f8', (4,)), ('f1', '<i4', (2,)), ('f2', '<f8', (3,)), ('f3', 'S10'), ('f4', 'S10')])
>>> load=np.genfromtxt(txt.splitlines(),dtype=dt,delimiter=',')
Теперь первое поле является (3,4) массив:
>>> load['f0']
array([[ 3.00000000e-01, 3.62268370e+01, -1.15046648e+02,
1.83625524e+03],
[ 6.00000000e-01, 3.62268370e+01, -1.15046648e+02,
1.83625524e+03],
[ 9.00000000e-01, 3.62268370e+01, -1.15046648e+02,
1.83625524e+03]])
>>> load['f1']
array([[0, 0],
[0, 0],
[0, 0]])
dt=np.dtype('(9)float,S10,S10')
также работает, так как 2 столбца int могут загружаться как float.
Последние 2 столбца могут быть загружены как np.datetime64
, хотя разделяющая их запятая может усложнить этот шаг.
Этих 9 числовых столбцов может быть извлечен из pandas
нагрузки в массив numpy
с плавающей точкой:
pload.values[:,:9].astype(float)
pload.as_matrix(range(9))
Является много вопросов о 'genfromtxt' производящих 1d массива. Плакаты не понимают, что у него есть сложный 'dtype'. Читайте о 'структурированных' массивах. – hpaulj
См. Http://stackoverflow.com/q/35699886/901925 – hpaulj