如何从for循环创建数据帧并添加一个不会被覆盖的列?

2024-06-07 13:48:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Alpha Vantage API中提取每日股票数据,该API返回JSON。因为我正在为多个公司提取数据,所以我创建了一个for循环,这样我就不必为每个公司重复这个过程(在下面的示例中,这两个公司是“zm”和“sq”)

for循环应该创建一个数据框,将每个公司的数据追加到底部。我面临的问题是,当我创建一个列来显示公司符号时,它会在每次遍历循环时覆盖上一个公司的符号如何在不覆盖上一个公司符号的情况下添加到公司符号列?

ticks = ['zm','sq']
df = pd.DataFrame()

for i in ticks:
    response = requests.request("GET", url="https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol="+i+"&outputsize=full&apikey=DEMOKEY")
    jsd = json.loads(response.text)
    df = df.append(pd.DataFrame(jsd['Time Series (Daily)']).T)
    df['symbol'] = i

df

这让我很接近,但在我创建的名为“symbol”的列中,每一行都写着“sq”,而不是“zm”行写着“zm”。“zm”行在循环中第二次被“sq”覆盖

Date    1. open 2. high 3. low  4. close    5. volume   symbol
2020-07-29  255.5500    259.9300    251.1500    252.3900    3260312 sq
2020-07-28  252.7000    258.9100    251.3200    252.1800    3366216 sq
2020-07-27  249.2800    252.9700    246.2200    252.3300    3328563 sq
2020-07-24  246.2000    250.2100    237.2000    246.5600    4303198 sq
2020-07-23  260.8400    264.9000    249.2100    251.5000    4589358 sq
... ... ... ... ... ... ...
2015-11-25  12.1200 12.4000 11.8500 11.9000 3583421 sq
2015-11-24  12.0000 12.2300 11.5200 12.0200 4714682 sq
2015-11-23  13.0000 13.1500 12.1000 12.1200 5172246 sq
2015-11-20  13.9200 14.0500 12.5000 12.8500 16550328    sq
2015-11-19  11.2000 14.7800 9.0000  13.0700 47466050    sq

有没有办法做到这一点(或者更好地实现我的目标)


Tags: 数据alphaapidataframedfforresponsesq
1条回答
网友
1楼 · 发布于 2024-06-07 13:48:58

我认为这应该行得通

ticks = ['zm','sq']
df = pd.DataFrame()

for i in ticks:
    response = requests.request("GET", url="https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol="+i+"&outputsize=full&apikey=DEMOKEY")
    jsd = json.loads(response.text)
    temp_df =pd.DataFrame(jsd['Time Series (Daily)']).T
    temp_df['symbol'] = i
    df = df.append(temp_df)
   
df

相关问题 更多 >

    热门问题