Чтение файла CSV в массив numpy, первая строка в виде строк, остальное как float - программирование

Чтение файла CSV в массив numpy, первая строка в виде строк, остальное как float

У меня есть данные, хранящиеся в CSV, где первая строка - это строки (имена столбцов), а остальные строки - цифры. Как сохранить это в массиве numpy? Все, что я могу найти, - это установить тип данных для столбцов, но не для строк.

Сейчас я просто пропускаю заголовки, чтобы делать вычисления, но мне нужно иметь заголовки в финальной версии. Но если я оставляю заголовки, он устанавливает весь массив как строку и вычисления терпят неудачу.

Это то, что у меня есть:

 data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', skip_header=1) 
4b9b3361

Ответ 1

Вы можете сохранить имена столбцов, если используете аргумент names=True в np.genfromxt

 data = np.genfromtxt(path_to_csv, dtype=float, delimiter=',', names=True) 

Обратите внимание на dtype=float, который преобразует ваши данные в float. Это более эффективно, чем использование dtype=None, которое просит np.genfromtxt угадать тип данных для вас.

Вывод будет структурированным массивом, где вы можете получить доступ к отдельным столбцам по их имени. Имена будут взяты из вашей первой строки. Могут произойти некоторые изменения, пробелы в имени столбца будут изменены, например, на _. Документация должна охватывать большинство вопросов, которые могут возникнуть.

Ответ 2

Я не уверен, что вы имеете в виду, когда говорите, что вам нужны заголовки в финальной версии, но вы можете сгенерировать структурированный массив, в котором доступ к столбцам осуществляется такими строками:

data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', names=True)

а затем доступ к столбцам с помощью data['col1_name'], data['col2_name'] и т.д.

Ответ 3

Вся идея массива numpy состоит в том, что все элементы одного типа. Прочитайте заголовки в списке Python и управляйте ими отдельно от чисел. Вы также можете создать структурированный массив (массив записей), и в этом случае вы можете использовать заголовки для обозначения полей в записях. Сохранение их в массиве в этом случае было бы лишним.