如何获取历史财务数据以进行Python数据分析?

时间:2019-01-10 09:54:27

标签: python-3.x finance yahoo-finance google-finance-api

我需要使用pandas DataReader获取以下银行的股票数据:

    Bank of America
    CitiGroup
    Goldman Sachs
    JPMorgan Chase
    Morgan Stanley
    Wells Fargo

如何获取这些银行在2006年1月1日至2016年1月1日的股票数据。

我尝试过...

import numpy as np
import pandas as pd
from pandas_datareader import data, wb
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import requests
import io
%matplotlib inline

import datetime
start = datetime.datetime(2006,1,1)
end = datetime.datetime(2016,1,1)

# Bank of America
BAC = data.DataReader("BAC",'ff', start, end)

4 个答案:

答案 0 :(得分:2)

2021 答案

在我看来,无需订阅 IEX 即可获得免费的 API 令牌或安装其他软件包。 Yahoo API 工作正常:

# Bank of America
BAC = data.DataReader("BAC", 'yahoo', start, end)

# CitiGroup
C = data.DataReader("C", 'yahoo', start, end)

# Goldman Sachs
GS = data.DataReader("GS", 'yahoo', start, end)

# JPMorgan Chase
JPM = data.DataReader("JPM", 'yahoo', start, end)

# Morgan Stanley
MS = data.DataReader("MS", 'yahoo', start, end)

# Wells Fargo
WFC = data.DataReader("WFC", 'yahoo', start, end)

答案 1 :(得分:1)

您的问题出在使用Datareader检索数据的源中。似乎'ff'并不对应于任何可接受的API。

我已经尝试过了,并且有效:

import pandas_datareader.data as web
from datetime import datetime

start = datetime(2016, 9, 1)
end   = datetime(2018, 9, 1)

f = web.DataReader('BAC', 'iex', start, end)
print(f)

另外,看看pandas-datareader official doccumentation,有很多示例。

答案 2 :(得分:0)

以下是我发现与其他方法不同的非常可靠的方法,我仅使用此方法进行分析,这从未使我失败。 (此外,可用数据的日期范围非常广泛,如下例所示)

from datetime import datetime
start = datetime(2006, 2, 9)
end = datetime(2018, 5, 24)
#Bank Of America
BAC = data.DataReader('BAC', 'yahoo', start, end)

答案 3 :(得分:0)

您可以尝试的另一种解决方案是investpy,这是一个Python软件包,用于从Investing.com提取来自世界各地的各种金融产品的历史数据。它没有限制,不需要API密钥,并且由于它是一个开源项目,因此它是完全免费的。

在这里,我向您展示一段代码,以便从您上面要求的股票的过去9年中检索股票历史数据:

import investpy

stock_symbols = ['BAC', 'C', 'GS', 'JPM', 'MS', 'WFC']

for stock_symbol in stock_symbols:
    df = investpy.get_stock_historical_data(stock=symbol,
                                            country='united states',
                                            from_date='01/01/2010',
                                            to_date='01/01/2019')
    print(df.head())

希望这对您有所帮助!而且,我也建议您使用 investpy


请注意,投资股票数据检索功能将股票代码和指定股票所在的国家/地区作为输入参数。依此类推,由于您输入的是股票名称,因此您需要搜索investpy数据才能检索您介绍的股票名称的符号,可以按以下步骤进行操作:

import investpy

stocks = ['Bank of America', 'CitiGroup', 'Goldman Sachs', 'JPMorgan', 'Morgan Stanley', 'Wells Fargo&Co']

for stock in stocks:
    print(investpy.search_stocks(by='name', value=stock))

上面的代码将打印发现的全部或部分与引入名称相匹配的股票。