Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何替换数据框中的股价符号_Python 3.x_Pandas_Dataframe_Web Scraping - Fatal编程技术网

Python 3.x 如何替换数据框中的股价符号

Python 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

我希望获得标准普尔500['Adj Close']列,并用相应的股票符号替换该列,但是,我无法替换数据帧列,因为它给了我一个错误:KeyError:'5'

我想实现的是循环遍历列表中所有可用的股票,并用股票符号替换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)
这就是我所做的:

首先,我从维基百科中抓取股票符号并将其添加到列表中

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