Python 指定替代日期时间格式";异常:无效的日期时间。它一定比最后一个大。”;
我正在尝试读取每15分钟有一个新数据输入的csv。据我所知,我之所以返回此异常是因为日期并不是每行都改变,但时间确实改变了。但是,feed没有及时读取,我不知道如何修复它。这是我的密码:Python 指定替代日期时间格式";异常:无效的日期时间。它一定比最后一个大。”;,python,python-2.7,csv,pyalgotrade,Python,Python 2.7,Csv,Pyalgotrade,我正在尝试读取每15分钟有一个新数据输入的csv。据我所知,我之所以返回此异常是因为日期并不是每行都改变,但时间确实改变了。但是,feed没有及时读取,我不知道如何修复它。这是我的密码: from pyalgotrade.feed import csvfeed feed = csvfeed.Feed("Date","%d/%m/%Y") feed.addValuesFromCSV("eurusd-15m-july-small.csv") for dateTime, value in feed:
from pyalgotrade.feed import csvfeed
feed = csvfeed.Feed("Date","%d/%m/%Y")
feed.addValuesFromCSV("eurusd-15m-july-small.csv")
for dateTime, value in feed:
print (dateTime, value)
我的csv看起来像这样:
Date,Time,Open,High,Low,Close,Volume
07/08/2018,17:30:00,1.15994,1.15994,1.15961,1.15982,414
07/08/2018,17:45:00,1.15982,1.16001,1.15964,1.15996,485
以下是全部错误:
(datetime.datetime(2018, 8, 7, 0, 0), {'High': 1.15994, 'Volume': 414.0,
'Low': 1.15961, 'Time': '17:30:00', 'Close': 1.15982, 'Open': 1.15994})
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-12-0cbdbe588a05> in <module>()
3 feed = csvfeed.Feed("Date","%d/%m/%Y")
4 feed.addValuesFromCSV("eurusd-15m-july-small.csv")
----> 5 for dateTime, value in feed:
6 print (dateTime, value)
/Users/Phil/anaconda2/lib/python2.7/site-
packages/pyalgotrade/feed/__init__.pyc in feed_iterator(feed)
29 try:
30 while not feed.eof():
---> 31 yield feed.getNextValuesAndUpdateDS()
32 finally:
33 feed.stop()
/Users/Phil/anaconda2/lib/python2.7/site-
packages/pyalgotrade/feed/__init__.pyc in getNextValuesAndUpdateDS(self)
88 ds = self.createDataSeries(key, self.__maxLen)
89 self.__ds[key] = ds
---> 90 ds.appendWithDateTime(dateTime, value)
91 return (dateTime, values)
92
/Users/Phil/anaconda2/lib/python2.7/site-
packages/pyalgotrade/dataseries/__init__.pyc in appendWithDateTime(self,
dateTime, value)
134
135 if dateTime is not None and len(self.__dateTimes) != 0 and
self.__dateTimes[-1] >= dateTime:
--> 136 raise Exception("Invalid datetime. It must be bigger than
that last one")
137
138 assert(len(self.__values) == len(self.__dateTimes))
Exception: Invalid datetime. It must be bigger than that last one
(datetime.datetime(2018,8,7,0,0),{'High':1.15994,“Volume':414.0,
“低”:1.15961,“时间”:17:30:00,“关闭”:1.15982,“打开”:1.15994})
---------------------------------------------------------------------------
异常回溯(最后一次最近调用)
在()
3 feed=csvfeed.feed(“日期”,%d/%m/%Y”)
4.从csv(EURMUSD-15m-july-small.csv)获得的提要添加值
---->5对于dateTime,提要中的值:
6打印(日期时间、值)
/Users/Phil/anaconda2/lib/python2.7/site-
feed迭代器(feed)中的packages/pyalgotrade/feed/_init___u;.pyc
29尝试:
30而不是feed.eof():
--->31产量饲料。GetNextValue和Updateds()
32最后:
33 feed.stop()
/Users/Phil/anaconda2/lib/python2.7/site-
GetNextValuesandUpdated(self)中的packages/pyalgotrade/feed/________.pyc
88 ds=self.createDataSeries(键,self.\uu maxLen)
89自我识别[key]=ds
--->90 ds.appendWithDateTime(日期时间,值)
91返回(日期时间、值)
92
/Users/Phil/anaconda2/lib/python2.7/site-
appendWithDateTime(self,
日期时间、值)
134
135如果dateTime不是None和len(self.\u dateTimes)!=0及
self.\uu dateTimes[-1]>=日期时间:
-->136引发异常(“无效的日期时间。它必须大于
最后一个)
137
138断言(len(self.\u值)=len(self.\u日期时间))
异常:无效的日期时间。它一定比最后一个大
提前谢谢 问题是datetime在两个单独的列中,因此@daniel提到必须自定义解析。试试这个:
import datetime
from pyalgotrade.feed import csvfeed
# Row parser that extracts the datetime combining 2 columns
class RowParser(csvfeed.RowParser):
def parseRow(self, csvRowDict):
dateTimeCombined = "%s %s" % (csvRowDict["Date"], csvRowDict["Time"])
dateTime = datetime.datetime.strptime(dateTimeCombined, "%d/%m/%Y %H:%M:%S")
# Convert the values
values = {}
for key, value in csvRowDict.items():
if key not in ["Date", "Time"]:
values[key] = csvfeed.float_or_string(key, value)
return (dateTime, values)
def getFieldNames(self):
return None
def getDelimiter(self):
return ","
feed = csvfeed.BaseFeed(RowParser())
feed.addValuesFromCSV("eurusd-15m-july-small.csv")
for dateTime, value in feed:
print (dateTime, value)
您必须编写自己的
RowParser
@Daniel我应该在哪里执行此操作?我应该编辑pyalgotrade的源代码还是定义一个新函数?或者,我可以使用pandas连接日期和时间行,然后读取数据帧吗?