Я импортирую матрицу данных csv 153,673*25
с целыми числами, поплавками и строками с помощью pandas через консоль IPython в Spyder Anaconda (Python 2). Затем я хочу преобразовать эти данные в структурированный массив, указав имена столбцов через имена столбцов pandaframe и типы вручную. Вот код - функции importing_data.run()
и attributes_names.run()
соответственно импортировать данные CSV в формате pandaframe и извлекать имена столбцов в pandaframe в виде списка:Структурированный массив Python не работает
import pandas
import numpy
import importing_data
import attributes_names
csv_data = importing_data.run()
names = attributes_names.run(csv_data)
type_list = ['int',
'str',
'str',
...
'float',
'int',
'int',
]
data_type = zip(names,type_list)
n_rows = len(csv_data.ix[:,0])
n_columns = len(csv_data.ix[0,:])
data_sample = numpy.zeros((n_rows,n_columns),dtype=data_type)
for i in range(0,n_columns):
column = csv_data.ix[:,i].values
data_sample[:,i] = column
Однако окончательный цикл, кажется, терпит неудачу: она иногда толкает ядро для перезапуска, а когда нет, массив data_sample
имеет неожиданную структуру; Я не могу точно описать это, поскольку в последнее время у меня только перезагрузка ядра, но я считаю, что это был размерный массив 153,673*25
, составленный из 153,673
мерных списков.
Что я здесь делаю неправильно?
Редактировать
Первая ошибка, которую я делал это следующим образом: вместо
data_sample = numpy.zeros((n_rows,n_columns),dtype=data_type)
я должен поставить:
data_sample = numpy.zeros((n_rows,1),dtype=data_type)
Я пересмотрел петля следующим образом:
for i in range(0,n_rows):
data_sample[i,0] = csv_data.values[i,:]
Но теперь я получаю следующее сообщение об ошибке: TypeError: expected a single-segment buffer object
Непонятно, что вы пытаетесь достичь ... Можете ли вы предоставить небольшой набор данных образцов (3-5 строк) и нужный набор данных? Пожалуйста, прочитайте [как сделать хорошие воспроизводимые примеры pandas] (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU
Попробуйте инициировать 'data_sample' to' (nrows,) '; и выполните 'data_sample [row] = tuple (csvdata ...)'. – hpaulj