使用datetime.strptime从.csv列获取日期

时间:2016-03-28 15:55:02

标签: python csv datetime numpy genfromtxt

请帮助!!

使用此代码遇到很多麻烦。这里的任务是根据与它们相关的日期绘制一些信息(高,低和中)。

数据位于.csv文件中,标题为:日期,高,中,低。日期为dd / mm / yyyy格式。

到目前为止,我已经使用genfromtxt来指定列和数据类型等。 但是,我认为Python在阅读专栏的过程中存在一个问题 - 我不断得到"索引太多":

Traceback (most recent call last):
File "F:\Python\A1.py", line 14, in <module>
x = data[:,0]
IndexError: too many indices

如果我使用x = data [;,&#39; Date],我得到这个:

Traceback (most recent call last):
File "F:\Python\A1.py", line 14, in <module>
x = data[:,'Date']
ValueError: invalid literal for long() with base 10: 'Date'

以下是完整的代码:

import pylab as py
import numpy as np
import datetime as dt
import csv

data = np.genfromtxt('F:\\Python\\All.csv', usecols=(0,1,2,3), names=True, skip_header=0, dtype=[('Date', 'S10')]),('High','f8'),('Medium','f8'),('Low','f8')], delimiter = ',')

print data

x = data[:,Date]
y1 = data[:,1]
y2 = data[:,2]
y3 = data[:,3]

Date2 = []

for x in data:
date_format = dt.datetime.strptime((str(x)), '%d/%m/%Y')
Date2.append.date_format

谢谢!

1 个答案:

答案 0 :(得分:0)

data = np.genfromtxt(...)生成具有三个元素的元组的一维数组。例如,数据将如下所示。

array([(b'02/03/2015', 3.0, 2.0, 1.0), (b'03/04/2015', 4.0, 3.0, 1.0),
       (b'04/05/2015', 10.0, 9.0, 7.0), (b'05/06/2015', 12.0, 4.0, 3.0),
       (b'06/07/2015', 2.0, 1.0, 0.0)], 
dtype=[('Date', 'S10'), ('High', '<f8'), ('Medium', '<f8'), ('Low', '<f8')])

您要做的是将数据视为二维数组,但它实际上是一维数组。所以你可以做这样的事情

x =  [foo[0] for foo in data]
y1 = [foo[1] for foo in data]
y2 = [foo[2] for foo in data]
y3 = [foo[3] for foo in data]