Чтение файла CSV в массив numpy, первая строка в виде строк, остальное как float
У меня есть данные, хранящиеся в CSV, где первая строка - это строки (имена столбцов), а остальные строки - цифры. Как сохранить это в массиве numpy? Все, что я могу найти, - это установить тип данных для столбцов, но не для строк.
Сейчас я просто пропускаю заголовки, чтобы делать вычисления, но мне нужно иметь заголовки в финальной версии. Но если я оставляю заголовки, он устанавливает весь массив как строку и вычисления терпят неудачу.
Это то, что у меня есть:
data = np.genfromtxt(path_to_csv, dtype=None, delimiter=',', skip_header=1)
Ответы
Ответ 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 и управляйте ими отдельно от чисел. Вы также можете создать структурированный массив (массив записей), и в этом случае вы можете использовать заголовки для обозначения полей в записях. Сохранение их в массиве в этом случае было бы лишним.