Python 3.x 如何替换数据框中的股价符号
我希望获得标准普尔500['Adj Close']列,并用相应的股票符号替换该列,但是,我无法替换数据帧列,因为它给了我一个错误:KeyError:'5' 我想实现的是循环遍历列表中所有可用的股票,并用股票符号替换Adj ClosePython 3.x 如何替换数据框中的股价符号,python-3.x,pandas,dataframe,web-scraping,Python 3.x,Pandas,Dataframe,Web Scraping,我希望获得标准普尔500['Adj Close']列,并用相应的股票符号替换该列,但是,我无法替换数据帧列,因为它给了我一个错误:KeyError:'5' 我想实现的是循环遍历列表中所有可用的股票,并用股票符号替换Adj Close stock_url = 'https://query1.finance.yahoo.com/v7/finance/download/{}?' params = { 'range' : '1y', 'interval' : '1d', 'ev
stock_url = 'https://query1.finance.yahoo.com/v7/finance/download/{}?'
params = {
'range' : '1y',
'interval' : '1d',
'events' : 'history'
}
df = pd.DataFrame()
for i in stock:
response = requests.get(stock_url.format(i), params=params)
file = io.StringIO(response.text)
reader = csv.reader(file)
data = list(reader)
df1 = pd.DataFrame(data)
df1.loc[df1[5] == 'Adj Close',5] = i
df = df.append(df1)
这就是我所做的:
首先,我从维基百科中抓取股票符号并将其添加到列表中
data = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
symbols = data[0] # get first column
symbols.head()
stock = symbols['Symbol'].to_list()
print(stock[0:5])
这给了我一个股票符号列表,如下所示:
['MMM'、'ABT'、'abv'、'ABMD'、'ACN']
然后我搜集了雅虎财经,得到了如下的每日财务数据
stock_url = 'https://query1.finance.yahoo.com/v7/finance/download/{}?'
params = {
'range' : '1y',
'interval' : '1d',
'events' : 'history'
}
response = requests.get(stock_url.format(stock[0]), params=params)
file = StringIO(response.text)
reader = csv.reader(file)
data = list(reader)
df = pd.DataFrame(data)
stock_data = df['5']
修复关键错误 您正在使用列表“stock”调用url,当我尝试时,它给出了404响应 使用如下所示的单个股票调用URL
requests.get(stock_url.format(stock[0]), params=params)
同样要执行以下操作,第5列存储为整数而不是字符。这就是您得到“密钥错误”的原因
stock_data = df[5]
我尝试了库存“MMM”-库存[0],它打印如下:
0 1 2 3 4 5 \
0 Date Open High Low Close Adj Close
1 2019-12-11 168.380005 168.839996 167.330002 168.740005 162.682480
2 2019-12-12 166.729996 170.850006 166.330002 168.559998 162.508926
3 2019-12-13 169.619995 171.119995 168.080002 168.789993 162.730667
4 2019-12-16 168.940002 170.830002 168.190002 170.750000 164.620316
.. ... ... ... ... ... ...
249 2020-12-04 172.130005 173.160004 171.539993 172.460007 172.460007
250 2020-12-07 171.720001 172.500000 169.179993 170.149994 170.149994
251 2020-12-08 169.740005 172.830002 169.699997 172.460007 172.460007
252 2020-12-09 172.669998 175.639999 171.929993 175.289993 175.289993
253 2020-12-10 174.869995 175.399994 172.690002 173.490005 173.490005
[254 rows x 7 columns]
在库存中循环并替换Adj Close(根据评论要求编辑)
循环遍历股票并用股票符号替换Adj close的代码
stock_url = 'https://query1.finance.yahoo.com/v7/finance/download/{}?'
params = {
'range' : '1y',
'interval' : '1d',
'events' : 'history'
}
df = pd.DataFrame()
for i in stock:
response = requests.get(stock_url.format(i), params=params)
file = io.StringIO(response.text)
reader = csv.reader(file)
data = list(reader)
df1 = pd.DataFrame(data)
df1.loc[df1[5] == 'Adj Close',5] = i
df = df.append(df1)
尝试了前3只股票的代码,如下所示:
你能把雅虎的数据框输出包括进来吗,这样我/其他人就不必使用
请求了
?你说得对!我刚换了。我有两个问题:1,我想保持第5列的Adj关闭,并将其重命名为符号(在本例中为MMM)2,我不想对股票列表中的单个元素执行此操作,而是循环遍历整个列表,然后将它们合并到一个列表中。我在上面添加了代码。这就是你需要的吗?你是说,你只想要“Adj close”值替换为相应的股票名称?请给出您的预期输出@Sharathnataj!我试图仅保留Adj Close列,并用相应的符号替换列名,并在整个符号列表中循环此操作,并在末尾将其保存在数据帧中。0日期打开高低关闭MMM第1卷2019-12-11 168.380005 168.839996 167.330002 168.740005 162.682480 18590002 2019-12-12 166.729996 170.850006 166.330002 168.559998 162.508926 2872400