gpt4 book ai didi

google-finance - 为什么谷歌的 pandas_datareader 不起作用?

转载 作者:行者123 更新时间:2023-12-01 13:27:52 25 4
gpt4 key购买 nike

我尝试通过以下代码从 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()

我明白了。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 24697: invalid start byte

但如果我将“google”更改为 'yahoo' (通过使用 yahoo finance 代替),它工作正常。那么它有什么问题呢?

最佳答案

有一个 Unresolved 问题 here .

下面是一个快速修复,从源代码移植,削减它并做一些细微的调整。

我认为问题在于 requests.get() 返回的正文和读取结果字节。 (追溯与此一致。)例如,尝试 data = requests.get(url).content (获取字节);这会失败。下面,data = requests.get(url).text 有效。

我确实没有对此进行严格测试,但 Google API 似乎工作正常。例如,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

编辑:该问题应在 pandas_datareader 的 0.6.0 版中得到修复。如果没有,请重新打开as bashtage requested .

关于google-finance - 为什么谷歌的 pandas_datareader 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47561211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com