Python如何获取历史财务数据进行数据分析?
How to get Historical Financial Data for Data Analysis in Python?
我需要使用 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)
您的问题出在您使用 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,有很多例子。
以下是我觉得非常可靠的方法,不像其他方法,我只用这个来分析,这个从来没有让我失望过。 (此外,可用数据的日期范围非常广泛,如下例所示)
from datetime import datetime
start = datetime(2006, 2, 9)
end = datetime(2018, 5, 24)
#Bank Of America
BAC = data.DataReader('BAC', 'yahoo', start, end)
您可以尝试的另一个解决方案是 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 股票数据检索函数将股票代码和指定股票所在的国家/地区作为输入参数。依此类推,由于您输入的是股票名称,您将需要搜索 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))
上面的代码将打印所有找到的与介绍的名称完全或部分匹配的股票。
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)
我需要使用 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)
您的问题出在您使用 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,有很多例子。
以下是我觉得非常可靠的方法,不像其他方法,我只用这个来分析,这个从来没有让我失望过。 (此外,可用数据的日期范围非常广泛,如下例所示)
from datetime import datetime
start = datetime(2006, 2, 9)
end = datetime(2018, 5, 24)
#Bank Of America
BAC = data.DataReader('BAC', 'yahoo', start, end)
您可以尝试的另一个解决方案是 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 股票数据检索函数将股票代码和指定股票所在的国家/地区作为输入参数。依此类推,由于您输入的是股票名称,您将需要搜索 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))
上面的代码将打印所有找到的与介绍的名称完全或部分匹配的股票。
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)