Я пытаюсь прочитать файл csv, который включает даты. CSV выглядит следующим образом:pandas parse датируется csv
h1,h2,h3,h4,h5
A,B,C,D,E,20150420
A,B,C,D,E,20150420
A,B,C,D,E,20150420
Для чтения CSV я использую этот код:
df = pd.read_csv(filen,
index_col=None,
header=0,
parse_dates=[5],
date_parser=lambda t:parse(t))
Функция синтаксического анализа выглядит следующим образом:
def parse(t):
string_ = str(t)
try:
return datetime.date(int(string_[:4]), int(string_[4:6]), int(string_[6:]))
except:
return datetime.date(1900,1,1)
Моя странная проблема сейчас является то, что в функция разбора, t
выглядит так:
ndarray: ['20150420' '20150420' '20150420']
Как видите, t
- это весь массив столбца данных. Я думаю, что это должно быть только первое значение при анализе первой строки, второе значение при разборе второй строки и т. Д. Прямо сейчас, parse
всегда заканчивается в исключающем блоке, потому что int(string_[:4])
содержит скобку, которая, не может быть преобразован в int. Функция синтаксического анализа построена для одновременного анализа только одной даты (например, 20150420
).
Что я делаю неправильно?
EDIT:
хорошо, я только что прочитал в панд документ о date_parser аргумента, и он, кажется, работает, как ожидалось (конечно;)). Поэтому мне нужно адаптировать мой код к этому. Мой вышеприведенный пример - копия &, вставленная откуда-то еще, и я ожидал, что она сработает, следовательно, мой вопрос .. Я отчитаю, когда я выполнил свою адаптацию кода.
EDIT2:
Моя функция синтаксического анализа теперь выглядит следующим образом, и я думаю, что код работает в настоящее время. Если я все еще делаю что-то не так, пожалуйста, дайте мне знать:
def parse(t):
ret = []
for ts in t:
string_ = str(ts)
try:
tsdt = datetime.date(int(string_[:4]), int(string_[4:6]), int(string_[6:]))
except:
tsdt = datetime.date(1900,1,1)
ret.append(tsdt)
return ret