загрузите csv в 2D матрицу с помощью numpy для построения графика
учитывая этот CSV-файл:
"A","B","C","D","E","F","timestamp"
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12
Я просто хочу загрузить его в виде матрицы / ndarray с 3 строками и 7 столбцами. Однако по какой-то причине все, что я могу получить из numpy, - это ndarray с 3 строками (по одной на строку) и без столбцов.
r = np.genfromtxt(fname,delimiter=',',dtype=None, names=True)
print r
print r.shape
[ (611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291111964948.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291113113366.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291120650486.0)]
(3,)
Я могу вручную повторить и взломать его в форму, которую я хочу, но это кажется глупым. Я просто хочу загрузить его как правильную матрицу, чтобы я мог нарезать его по разным измерениям и построить его, как в matlab.
3 ответов:
чистый numpy
numpy.loadtxt(open("test.csv", "rb"), delimiter=",", skiprows=1)Проверьте loadtxt документация.
вы также можете использовать модуль csv python:
import csv import numpy reader = csv.reader(open("test.csv", "rb"), delimiter=",") x = list(reader) result = numpy.array(x).astype("float")Вам нужно будет преобразовать его в свой любимый числовой тип. Я думаю, вы можете написать все это в одной строке:
result = numpy.array(list(csv.reader(open("test.csv", "rb"), delimiter=","))).astype("float")Добавлена Подсказка:
вы также можете использовать
pandas.io.parsers.read_csvи получения соответствующегоnumpyмассив, который может быть быстрее.
Я думаю, что с помощью
dtypeгде есть строка имени запутывает процедуру. Попробуй>>> r = np.genfromtxt(fname, delimiter=',', names=True) >>> r array([[ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03, 8.64075140e+02, 1.71537476e+03, 7.65227770e+02, 1.29111196e+12], [ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03, 8.64075140e+02, 1.71537476e+03, 7.65227770e+02, 1.29111311e+12], [ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03, 8.64075140e+02, 1.71537476e+03, 7.65227770e+02, 1.29112065e+12]]) >>> r[:,0] # Slice 0'th column array([ 611.88243, 611.88243, 611.88243])
вы можете прочитать CSV-файл с заголовками в numpy структурированный массив С np.genfromtxt. Например:
import numpy as np csv_fname = 'file.csv' with open(csv_fname, 'w') as fp: fp.write("""\ "A","B","C","D","E","F","timestamp" 611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12 611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12 611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12 """) # Read the CSV file into a Numpy record array r = np.genfromtxt(csv_fname, delimiter=',', names=True, case_sensitive=True) print(repr(r))выглядит так:
array([(611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111196e+12), (611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111311e+12), (611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29112065e+12)], dtype=[('A', '<f8'), ('B', '<f8'), ('C', '<f8'), ('D', '<f8'), ('E', '<f8'), ('F', '<f8'), ('timestamp', '<f8')])вы можете получить доступ к имени столбца, как это
r['E']:array([1715.37476, 1715.37476, 1715.37476])
Примечание: этот ответ ранее использовавшихся np.recfromcsv для чтения данных в массив записей NumPy. Хотя в этом методе не было ничего плохого, структурированные массивы как правило, лучше, чем массивы записей для скорости и совместимости.
Comments