如何在DataFrame中添加带有股票代码的列?

问题描述 投票:0回答:1

我试着用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

python pandas
1个回答
0
投票

你可以使用与创建DataFrame相同的函数。pd.concat(). 它的第一个参数是一个要连接的 pandas 系列或 DataFrames 的列表,因此 stocks 应先将其转换为系列。您可以用 pd.Series(),它还需要一个 name 参数,你可以用它来指定列名。最后,将 axis=1pd.concat() 使之成为沿列的连接。

df = pd.concat([pd.Series(stocks, name='Symbol'), df], axis=1)

0
投票

为什么不改变获取数据的方式呢?

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

我想这也是更有效的方法。

© www.soinside.com 2019 - 2024. All rights reserved.