【问题标题】:How to get Historical Financial Data for Data Analysis in Python?如何在 Python 中获取用于数据分析的历史财务数据?
【发布时间】:2019-01-10 09:54:26
【问题描述】:

我需要使用 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)

【问题讨论】:

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


    【解决方案1】:

    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)
    

    【讨论】:

    • 为标题点赞。
    【解决方案2】:

    您的问题在于您使用 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,有很多例子。

    【讨论】:

      【解决方案3】:

      您可以尝试的另一个解决方案是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))
      

      上面的代码将打印所有找到的与介绍名称完全或部分匹配的股票。

      【讨论】:

        【解决方案4】:

        以下是我认为与其他方法不同的非常可靠的方法,我只用它来分析,这从来没有让我失望过。 (此外,可用数据的日期范围非常广泛,如下例所示)

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

        【讨论】:

          猜你喜欢
          • 2017-11-29
          • 2012-04-08
          • 1970-01-01
          • 2017-06-17
          • 1970-01-01
          • 2013-08-29
          • 1970-01-01
          • 2014-01-02
          • 1970-01-01
          相关资源
          最近更新 更多