Чтение значений из 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's frompyfunc () вернуть изображение?
  • Как извлечь биты больших числовых типов данных Numpy
  • Хранение Dataframe с записями Array
  • настройка numpy / scipy в режиме ожидания
  • арифметические сравнения на массивах numpy
  • Сгенерировать все возможные исходы k шаров в n бункерах (сумма многочленных / категориальных результатов)
  • Численное и статическое связывание
  • подстановка __iadd__ не работает должным образом для оператора + =
  • Как вернуть максимальное значение из многомерного массива?
  • numpy.bitwise_and.reduce ведет себя неожиданно?
  • Ковариация с колонками
  • Python - лучший язык программирования в мире.