怎么用pandas_datareader在stoop上同时获得整个sp500所有股票的数据
时间: 2024-04-20 07:27:33 浏览: 13
要同时获取Stooq上整个S&P 500指数所有成分股的数据,可以使用pandas_datareader库和pandas库进行数据处理。以下是一些示例代码:
```python
import pandas_datareader.data as web
import pandas as pd
import datetime
# 获取S&P 500指数成分股的列表
sp500 = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')[0]
symbols = sp500['Symbol'].tolist()
# 设置起始日期和结束日期
start = datetime.datetime(2021, 1, 1)
end = datetime.datetime(2021, 12, 31)
# 从Stooq获取所有成分股的历史行情
dfs = {}
for symbol in symbols:
try:
df = web.DataReader(f"{symbol}.US", "stooq", start, end)
dfs[symbol] = df
except:
pass
# 将数据合并为一个DataFrame
df_all = pd.concat(dfs, axis=1)
# 查看前5行数据
print(df_all.head())
```
在上面的代码中,我们首先从维基百科获取S&P 500指数的成分股列表,并将其存储在了DataFrame数据结构sp500中。然后,我们遍历所有成分股的股票代码,使用pandas_datareader库的DataReader()函数从Stooq网站获取历史行情数据,并将所有数据存储在了一个字典dfs中。最后,我们使用pandas库的concat()函数将所有数据合并为一个DataFrame数据结构df_all,并打印其前5行数据。
需要注意的是,由于Stooq网站的数据质量和可靠性并不完全可控,获取到的数据可能存在一些缺失值和错误值,需要进行数据清洗和处理后再进行分析。此外,获取所有成分股的历史行情数据可能需要一定的时间和计算资源,需要考虑计算机性能和网络速度等因素。