2017-01-29 20 views
0

Ich versuche, Daten aus einer CSV-Datei zu laden und eine Spalte mit einem Datum in eine Wochennummer zu konvertieren. Ich erhalte unten erwähnt TypeError:Umwandlung einer Loadtxt-Spalte in einen Wochentag: TypeError: strptime() Argument 1 muss str sein, keine Bytes

import numpy as np 

from datetime import datetime 

def datestr2num(s): 
    return datetime.strptime(s, "%d-%m-%Y").date().weekday() 

dates, close = np.loadtxt(
    'data.csv', delimiter=',', usecols=(1,6), 
    converters={1: datestr2num}, unpack=True) 

print("Dates =", dates) 

Fehler:

TypeError: strptime() argument 1 must be str, not bytes 

ich auf Python dieses Programm auszuführen versucht 3.5.2 -Anaconda custom (64-bit)

+0

'loadtxt' gibt kein Tupel zurück? https://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html – ppasler

Antwort

2

Converters die gegeben sind roher bytes Wert aus der Datei gelesen; Sie müssen diese zuerst zu einem String dekodieren, wenn Sie sie als Datetime-Wert analysieren wollen. ASCII sollte ausreichen, wie Sie Ihre Eingabe einfach eine Reihe von Ziffern und Bindestriche ein Datum zu bilden:

def datestr2num(s): 
    s = s.decode('ascii') 
    return datetime.strptime(s, "%d-%m-%Y").weekday() 

Hinweis: Ich habe die .date() Anruf entfernt; Das Objekt datetime unterstützt die datetime.weekday() method direkt.

+0

Sollte eine 'csv' Datei nicht im Klartext sein? – ppasler

+0

Vielen Dank sir ..... das Problem verstanden – Niko

+0

@ppasler: 'numpy.loadtxt()' dekodiert nicht Bytes bei der Verwendung von Konvertern. –

Verwandte Themen