Как заставить genfromtxt читать CSV как массив записей?
Я пытаюсь прочитать CSV со следующей строкой:
raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)
Хорошо, эта функция считывает этот файл в массив записей, когда встречает строковые данные в файле данных. насколько я понимаю, когда dtype равен None, файл должен быть прочитан и в массив записей. Это верно?
Однако, если строковые данные отсутствуют и представлены только числовые данные, эта функция считывает данные в ndarray.
Если нет, есть ли удобный способ заставить эту функцию читать файл как массив записей?
Проблема с ndarray заключается в том, что весь мой код построен для обработки массивов записей.
UPD1 На всякий случай, если кто-то попытается это сделать, вот краткое решение. Возможно, этот не самый лучший, но, по крайней мере, он работает:
Чтение файла из CSV как ndarrayraw_data = genfromtxt(datafile,delimiter='\t',dtype=None)
Сгенерируйте имена и типы данных по умолчанию для столбцов:
names_=['f'+str(i) for i in range(raw_data.shape[1])];
names=[(name,raw_data.dtype) for name in names_];
И, наконец, создать массив записей:
raw_data_as_ra = raw_data.ravel().view(names);
1 ответ
Вы могли бы использовать recfromcsv
, который получен из genfromtxt, вместо этого:
Если ваш файл выглядит так:
col1,col2,col3
1.1, 2.4, 3.2
4.1, 5.2, 6.3
Тогда сделай это
a = np.recfromcsv('yourfile.csv')
дает:
rec.array([(1.1, 2.4, 3.2), (4.1, 5.2, 6.3)],
dtype=[('col1', '<f8'), ('col2', '<f8'), ('col3', '<f8')])
Обратите внимание, что recfromcsv
использует первую строку в качестве имени столбца / записи.
Кроме того, вы можете использовать те же входные параметры, что и genfromtxt
(например, delimiter
параметр). Ваша строка кода может выглядеть следующим образом, если ваш файл разделен табуляцией:
np.recfromcsv(datafile,delimiter='\t'))