我试着用pandas_datareader来提取股票报价。这是我使用的代码。
import pandas_datareader.data as web
import datetime as dt
import pandas as pd
stocks=['asb.pl','plw.pl','ten.pl']
df = pd.concat([web.DataReader(stock,'stooq')[:1] for stock in stocks]).reset_index()
print(df)的结果是这样的:
Date Open High Low Close Volume
0 2020-04-30 3.37 3.39 3.28 3.28 128860
1 2020-04-30 449.50 449.50 415.00 425.00 43509
2 2020-04-30 440.00 444.00 410.50 419.50 23920
我怎样才能在第一列添加一个股票符号 使结果看起来像这样:
Symbol Date Open High Low Close Volume
0 asb.pl 2020-04-30 3.37 3.39 3.28 3.28 128860
1 plw.pl 2020-04-30 449.50 449.50 415.00 425.00 43509
2 ten.pl 2020-04-30 440.00 444.00 410.50 419.50 23920
你可以使用与创建DataFrame相同的函数。pd.concat()
. 它的第一个参数是一个要连接的 pandas 系列或 DataFrames 的列表,因此 stocks
应先将其转换为系列。您可以用 pd.Series()
,它还需要一个 name
参数,你可以用它来指定列名。最后,将 axis=1
到 pd.concat()
使之成为沿列的连接。
df = pd.concat([pd.Series(stocks, name='Symbol'), df], axis=1)
为什么不改变获取数据的方式呢?
import datetime as dt
import pandas_datareader as pdr
stocks = ['asb.pl', 'plw.pl', 'ten.pl']
end = dt.datetime.now()
start = end - dt.timedelta(days=2)
print(start, end="\n\n")
df = pdr.get_data_stooq(symbols=stocks, start=start, end=end).stack("Symbols")
print(df)
输出的方式。
2020-04-29 17:21:12.690845
Attributes Close High Low Open Volume
Date Symbols
2020-04-30 asb.pl 3.28 3.39 3.280 3.37 128860
plw.pl 425.00 449.50 415.000 449.50 43509
ten.pl 419.50 444.00 410.500 440.00 23920
2020-04-29 asb.pl 3.32 3.38 3.245 3.25 144000
plw.pl 449.50 453.00 440.500 441.00 13464
ten.pl 431.00 435.00 415.500 416.50 24347
我想这也是更有效的方法。