Как заставить 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'))
Другие вопросы по тегам