Чтение значений из CSV-файла и преобразование их в массивы с плавающей запятой

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

2011-06-19 17:29:00.000,72,44,56,0.4772,0.3286,0.8497,31.3587,0.3235,0.9147,28.5751,0.3872,0.2803,0,0.2601,0.2073,0.1172,0,0.0,0,5.8922,1,0,0,0,1.2759 

Теперь мне нужно в основном целый файл, состоящий из таких строк, и проанализировать их в массивах numpy. До сих пор я мог получить их в большой объект типа строки, используя код, подобный этому:

 order_hist = np.loadtxt(filename_input,delimiter=',',dtype={'names': ('Year', 'Mon', 'Day', 'Stock', 'Action', 'Amount'), 'formats': ('i4', 'i4', 'i4', 'S10', 'S10', 'i4')}) 

Формат этого файла состоит из набора типов данных S20 на данный момент. Мне нужно в основном извлечь все данные из большого типа данных ORDER_HIST в набор массивов для каждого столбца. Я не знаю, как сохранить столбец времени даты (я сохранил его как String). Мне нужно преобразовать остальные в float, но приведенный ниже код дает мне ошибку:

  temparr=float[:len(order_hist)] for x in range(len(order_hist['Stock'])): temparr[x]=float(order_hist['Stock'][x]); 

Может ли кто-нибудь показать мне, как я могу преобразовать все столбцы в массивы, которые мне нужны? Или, возможно, направить мне ссылку на это?

One Solution collect form web for “Чтение значений из CSV-файла и преобразование их в массивы с плавающей запятой”

Мальчик, я получил удовольствие от тебя. numpy.genfromtxt имеет параметр converters , который позволяет вам указывать функцию для каждого столбца при анализе файла. Функция получает строковое значение CSV. Его возвращаемое значение становится соответствующим значением в массиве numpy.

Более того, параметр dtype = None указывает genfromtxt сделать разумное предположение о типе каждого столбца. В частности, числовые столбцы автоматически переводятся в соответствующий тип dtype.

Например, предположим, что ваш файл данных содержит

 2011-06-19 17:29:00.000,72,44,56 

затем

 import numpy as np import datetime as DT def make_date(datestr): return DT.datetime.strptime(datestr, '%Y-%m-%d %H:%M:%S.%f') arr = np.genfromtxt(filename, delimiter = ',', converters = {'Date':make_date}, names = ('Date', 'Stock', 'Action', 'Amount'), dtype = None) print(arr) print(arr.dtype) 

доходность

 (datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56) [('Date', '|O4'), ('Stock', '<i4'), ('Action', '<i4'), ('Amount', '<i4')] 

В вашем реальном CSV-файле больше столбцов, поэтому вы хотите добавить больше names к names , но в остальном этот пример все равно должен стоять.

Если вам действительно не нужны дополнительные столбцы, вы можете назначить пушистое имя:

 arr = np.genfromtxt(filename, delimiter=',', converters={'Date': make_date}, names=('Date', 'Stock', 'Action', 'Amount') + tuple('col{i}'.format(i=i) for i in range(22)), dtype = None) 

доходность

 (datetime.datetime(2011, 6, 19, 17, 29), 72, 44, 56, 0.4772, 0.3286, 0.8497, 31.3587, 0.3235, 0.9147, 28.5751, 0.3872, 0.2803, 0, 0.2601, 0.2073, 0.1172, 0, 0.0, 0, 5.8922, 1, 0, 0, 0, 1.2759) 

Вы также можете быть заинтересованы в проверке модуля pandas, который построен поверх numpy , и который анализирует CSV на еще более высокий уровень роскоши: у него есть функция parse_dates = True , parse_dates = True параметр будет автоматически анализировать строки даты ( используя dateutil ).

Используя pandas, ваш csv можно проанализировать с помощью

 df = pd.read_csv(filename, parse_dates = [0,1], header = None, names=('Date', 'Stock', 'Action', 'Amount') + tuple('col{i}'.format(i=i) for i in range(22))) 

Обратите внимание: нет необходимости указывать функцию make_date . Just to be clear -- . Just to be clear -- pands.read_csv returns a DataFrame, а не массив numpy. DataFrame может быть более полезен для вашей цели, но вы должны знать, что это другой объект с совершенно новым миром методов для использования и изучения.

  • Объединение нарезки и широковещательной индексации для многомерных массивов numpy
  • преобразование списка строк python в их тип
  • являются элементами массива в множестве?
  • Поиск индекса N самых больших элементов в массиве Python / Список эффективно
  • Начинающий расширяет C с помощью Python (в частности, Numpy)
  • обтекание срезов в Python / numpy
  • путать с документом numpy.c_ и примером кода
  • Как применить функцию к каждому элементу массива, когда результат зависит от предыдущей ячейки
  • Python - лучший язык программирования в мире.