Skip to content

Commit ee605cb

Browse files
authored
Merge pull request #476 from bashtage/mstar-date-bug
BUG: Fix date conversion bug in Morningstar
2 parents 39b5b16 + 251f7fb commit ee605cb

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

pandas_datareader/mstar/daily.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import time
2-
from datetime import datetime, timedelta
2+
from datetime import datetime
33
from warnings import warn
44

55
import requests
66
from pandas import DataFrame
77

88
from pandas_datareader._utils import SymbolWarning
99
from pandas_datareader.base import _BaseReader
10+
import pandas as pd
1011

1112

1213
class MorningstarDailyReader(_BaseReader):
@@ -149,13 +150,9 @@ def _dl_mult_symbols(self, symbols):
149150
return dfx
150151

151152
@staticmethod
152-
def _convert_index2date(enddate, indexvals):
153-
i = 0
154-
while i < len(indexvals):
155-
days = indexvals[len(indexvals) - 1] - indexvals[i]
156-
d = enddate - timedelta(days=days)
157-
i += 1
158-
yield d.strftime("%Y-%m-%d")
153+
def _convert_index2date(indexvals):
154+
base = pd.to_datetime('1900-1-1')
155+
return [base + pd.to_timedelta(iv, unit='d') for iv in indexvals]
159156

160157
def _restruct_json(self, symbol, jsondata):
161158
if jsondata is None:
@@ -166,11 +163,11 @@ def _restruct_json(self, symbol, jsondata):
166163
dateidx = jsondata["PriceDataList"][0]["DateIndexs"]
167164
volumes = jsondata["VolumeList"]["Datapoints"]
168165

169-
date_ = self._convert_index2date(enddate=self.end, indexvals=dateidx)
166+
dates = self._convert_index2date(indexvals=dateidx)
170167
barss = []
171168
for p in range(len(pricedata)):
172169
bar = pricedata[p]
173-
d = next(date_)
170+
d = dates[p]
174171
bardict = {
175172
"Symbol": symbol, "Date": d, "Close": bar[0], "High": bar[1],
176173
"Low": bar[2], "Open": bar[3]
@@ -180,8 +177,8 @@ def _restruct_json(self, symbol, jsondata):
180177
else:
181178
events = []
182179
for x in divdata:
183-
delta = (datetime.strptime(x["Date"], "%Y-%m-%d") -
184-
datetime.strptime(d, "%Y-%m-%d"))
180+
delta = (datetime.strptime(x["Date"], "%Y-%m-%d")
181+
- d.to_pydatetime())
185182
if delta.days == 0:
186183
events.append(x)
187184
for e in events:

pandas_datareader/tests/mstar/test_daily.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def test_mstar_reader_class(self):
114114
dr = MorningstarDailyReader(symbols="GOOG", interval="d")
115115
df = dr.read()
116116

117-
assert df.Close[('GOOG', '2017-12-13')] == 1040.61
117+
assert df.Close['GOOG']['2017-12-13'] == 1040.61
118118

119119
session = requests.Session()
120120

0 commit comments

Comments
 (0)