使用DataRead的Python Concat数据帧列表

2024-06-28 20:46:58 发布

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

我正在尝试使用datareader捕获股票数据。给定一些股票符号,只需手动编写每个DataReader调用的脚本,然后计算结果就足够简单了。但是,如果列表的长度增长到一个更长的数字,就必须有一种更简单的方法来迭代这个过程。你知道吗

import pandas_datareader.data as web
import pandas as pd

symbols = ['AMZN','AAPL','MSFT','NFLX','GOOGL']
for i in symbols:
    print(i)

dfAMZN = web.DataReader('AMZN','yahoo')
dfAMZN['Symbol'] = 'AMZN'
dfAMZN['Date'] = dfAMZN.index

dfAAPL = web.DataReader('AAPL','yahoo')
dfAAPL['Symbol'] = 'AAPL'
dfAAPL['Date'] = dfAAPL.index

dfMSFT = web.DataReader('MSFT','yahoo')
dfMSFT['Symbol'] = 'MSFT'
dfMSFT['Date'] = dfMSFT.index

dfNFLX = web.DataReader('NFLX','yahoo')
dfNFLX['Symbol'] = 'NFLX'
dfNFLX['Date'] = dfNFLX.index

dfGOOGL = web.DataReader('GOOGL','yahoo')
dfGOOGL['Symbol'] = 'GOOGL'
dfGOOGL['Date'] = dfGOOGL.index

frames = [dfAMZN, dfAAPL, dfMSFT, dfNFLX, dfGOOGL]
dfStocks = pd.concat(frames)

有没有一种方法可以遍历符号列表并执行以下步骤,而不只是打印i?你知道吗


Tags: webdateindexsymbolyahooaaplmsftdatareader
1条回答
网友
1楼 · 发布于 2024-06-28 20:46:58

对新列使用list comprehension^{}

symbols = ['AMZN','AAPL','MSFT','NFLX','GOOGL']
frames = [web.DataReader(i,'yahoo').assign(Symbol = i, Date = lambda x: x.index) 
          for i in symbols]

dfStocks = pd.concat(frames)

另一种选择:

symbols = ['AMZN','AAPL','MSFT','NFLX','GOOGL']

frames = []
for i in symbols:
    df = web.DataReader(i,'yahoo')
    df['Symbol'] = i
    df['Date'] = df.index
    frames.append(df)

dfStocks = pd.concat(frames)

相关问题 更多 >