Почему pandas_datareader для Google не работает?
Я попытался получить данные из Google Finance с помощью следующего кода:
import pandas_datareader.data as wb
import datetime as dt
start = dt.datetime(2015, 1, 1)
end = dt.datetime(2017, 1, 1)
dt = wb.DataReader('FB', 'google', start, end)
dt.head()
и я получил это.
Но если я изменил "google" на "yahoo" (используя вместо этого "yahoo finance"), он работает нормально. Так что с этим не так?
2 ответа
Здесь есть открытый вопрос.
Ниже приведено быстрое исправление, портирование от источника, очистка от него и внесение нескольких небольших изменений.
Я считаю, что проблема с телом, возвращеннымrequests.get()
и чтение результирующих байтов. (Traceback согласен с этим.) Например, попробуйтеdata = requests.get(url).content
(получает байты); это не удастся. Ниже, data = requests.get(url).text
работает.
Я действительно не проверял это строго, но API Google, кажется, работает хорошо. Например, ссылка на экспорт, сгенерированнаяurl
в данный момент работает нормально.
import datetime
import requests
from io import StringIO
from pandas.io.common import urlencode
import pandas as pd
BASE = 'http://finance.google.com/finance/historical'
def get_params(symbol, start, end):
params = {
'q': symbol,
'startdate': start.strftime('%Y/%m/%d'),
'enddate': end.strftime('%Y/%m/%d'),
'output': "csv"
}
return params
def build_url(symbol, start, end):
params = get_params(symbol, start, end)
return BASE + '?' + urlencode(params)
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime.today()
sym = 'SPY'
url = build_url(sym, start, end)
data = requests.get(url).text
data = pd.read_csv(StringIO(data), index_col='Date', parse_dates=True)
print(data.head())
# Open High Low Close Volume
# Date
# 2017-11-30 263.76 266.05 263.67 265.01 127894389
# 2017-11-29 263.02 263.63 262.20 262.71 77512102
# 2017-11-28 260.76 262.90 260.66 262.87 98971719
# 2017-11-27 260.41 260.75 260.00 260.23 52274922
# 2017-11-24 260.32 260.48 260.16 260.36 27856514
Редактировать: проблема должна быть исправлена в версии 0.6.0 pandas_datareader. Если нет, пожалуйста, снова откройте его, как запрашивается bashtage.
from pandas_datareader import datagoog = data.DataReader('GOOG', start='2004',nd='2016',data_source='google') # Используйте Yahoo и получите ответ goog.head()enter code here