2016-01-07 2 views
2

Я пытаюсь импортировать простой CSV-файл с помощью Numpy genfromtxt, но не могу преобразовать данные первого столбца в даты.Загрузка даты в Numpy genfromtxt

Вот мой код:

import numpy as np 
from datetime import datetime 

str2date = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S') 

data = np.genfromtxt('C:\\\\data.csv',dtype=None,names=True, delimiter=',', converters = {0: str2date}) 

Я получаю следующее сообщение об ошибке в str2date:

TypeError: must be str, not bytes

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

+2

Не могли бы вы поделиться по крайней мере часть вашего 'data.csv' файла? – Gabriel

ответ

2

Проблема в том, что аргумент, переданный str2date, имеет такую ​​форму b'%Y-%m-%d %H:%M:%S'. Это байты, которые по праву не могут быть проанализированы для объекта datetime. Решение этой проблемы достаточно просто, хотя, как вы должны расшифровать вашу строку байт в UTF-8 строку:

str2date = lambda x: datetime.strptime(x.decode("utf-8"), '%Y-%m-%d %H:%M:%S')

+0

Спасибо. Я не понимаю, почему тип, выбранный genfromtxt, является байтовым массивом вместо строки ... В любом случае, я сделал вашу модификацию, выполнил загрузку, но получил еще одну ошибку: ConverterError: конвертер # 0 заблокирован и не может быть обновлен: (произошла строка # 1 для значения 'b'2011-01-01 00:00:00' '), хотя дата действительна ... –

+0

@MarkMorrisson см. мой обновленный ответ! Надеюсь, это поможет. –

+0

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

-3

это очень хорошая идея. У меня была такая же проблема, когда я попытался использовать numpy для Python 3.4. Для python 2.7.10 это не обязательно. Спасибо. :-) Это мой образец. вход

Файл:

06-07-2016,95.5300,30877540.0000,94.6000,95.6600,94.3700 
05-07-2016,95.0400,27553750.0000,95.3900,95.4000,94.4600 
01-07-2016,95.8900,25982080.0000,95.4900,96.4650,95.3300* 

Код:

dates = numpy.loadtxt(
      'data.csv', 
      dtype = object, 
      converters={0: lambda x: datetime.datetime.strptime(x.decode("utf-8"), "%d-%m-%Y")}, 
      delimiter=',', 
      usecols=(0,), 
      unpack=True 
)