试图从雅虎金融找到以下股票的平均回报率

2024-10-03 13:26:43 发布

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

tickers = ['BIOCON.NS', 'HDFCBANK.NS', 'RELIANCE.NS', 'RADICO.NS', 'LTI.NS', 'TCS.NS', 'DRREDDY.NS','BAJFINANCE.NS']

pfolio_data = pd.DataFrame()

for t in tickers:
    pfolio_data[t] = wb.DataReader(t, data_source='yahoo', start ='2017-1-1')['Adj Close']

pfolio_data_returns= (pfolio_data/pfolio_data.shift(1))-1
pfolio_data_returns

pfolio_data_returns[[[[[[[['BIOCON.NS', 'HDFCBANK.NS', 'RELIANCE.NS', 'RADICO.NS', 'LTI.NS', 'TCS.NS', 'DRREDDY.NS','BAJFINANCE.NS']]]]]]]].mean()

最后一个代码向我显示错误-

unhashable type: 'list'

我该怎么做呢


Tags: dataframedataltireturnspdnstickerstcs
3条回答

pfolio_数据_返回中的数据是什么样子的?
也许这就是你想要的:
Type error: unhashable type 'list' while selecting subset from specific columns pandas dataframe

这应该起作用:

import pandas as pd
import pandas_datareader as wb

tickers = ['BIOCON.NS', 'HDFCBANK.NS', 'RELIANCE.NS', 'RADICO.NS', 'LTI.NS', 'TCS.NS', 'DRREDDY.NS','BAJFINANCE.NS']
data = {ticker: wb.DataReader(ticker, data_source='yahoo', start ='2017-1-1')['Adj Close'] for ticker in tickers}
df_raw = pd.DataFrame(data)

df_returns = (
    df_raw
    .apply(lambda df: df/df.shift(1)-1)
)

df_returns.mean()

Out[28]: 
BIOCON.NS        0.001252
HDFCBANK.NS      0.000694
RELIANCE.NS      0.001477
RADICO.NS        0.001759
LTI.NS           0.001306
TCS.NS           0.000831
DRREDDY.NS       0.000503
BAJFINANCE.NS    0.001425
dtype: float64

我改变了创建数据帧的方式。通过字典理解,看起来干净多了df_raw包含原始数据,df_returns计算返回值,下面的.mean()语句计算每列的平均值

打开/关闭括号太多。以下工作:

pfolio_data_returns[['BIOCON.NS', 'HDFCBANK.NS', 'RELIANCE.NS', 'RADICO.NS', 'LTI.NS', 'TCS.NS', 'DRREDDY.NS','BAJFINANCE.NS']].mean()

相关问题 更多 >