0

也许是一个愚蠢的问题,但我是初学者。我使用下面的代码来计算股票收益和平方对数收益:

#read csv
stock1 = pd.read_csv('http://mydata.com/q/c/?d=stock1%d1=20190101&d2=20200101')
stock2 = pd.read_csv('http://mydata.com/q/c/?d=stock2%d1=20190101&d2=20200101')

#calculate return
stock1['r'] = np.log(stock1.close) - np.log(stock1.close.shift(1))
stock2['r'] = np.log(stock2.close) - np.log(stock2.close.shift(1))

#calculate squared returns and rolling returns
stock1_sq_r = stock1['r'] * stock1['r']
stock2_sq_r = stock2['r'] * stock2['r']

rolled_s1_sq_r = stock1_sq_r.rolling(window=5).sum()
rolled_s2_sq_r = stock2_sq_r.rolling(window=5).sum()

它很有魅力,但我需要为 100 只股票做这件事……我怎样才能把上面放在循环中?

我猜想读取 csv 的循环应该是这样的:

stocks = {'stock1', 'stock2', 'stock3'}
      for stock in stocks:
      url = ('http://http://mydata.com/q/c/?d={}%d1=20190101&d2=20200101')
      dfs = pd.read_csv(url.format(stock))

但它只读取 stock3 的数据,我不知道如何循环其余的计算。

感谢您的任何建议,方向,线索。

4

3 回答 3

0

缩进可能是你的问题。尝试这个:

stocks = {'stock1', 'stock2', 'stock3'}
      for stock in stocks:
          url = ('http://http://mydata.com/q/c/?d={}%d1=20190101&d2=20200101')
          dfs = pd.read_csv(url.format(stock))

注意 for 循环内的缩进。

于 2020-01-21T12:05:55.097 回答
0

您可以将所有值读取到字典中(stock_name作为键和dataframe值)

all_data_dict ={}

stocks = {'stock1', 'stock2', 'stock3'}
for stock in stocks:
   url = 'http://http://mydata.com/q/c/?d={}%d1=20190101&d2=20200101'.format(stock)
   all_data_dict[stock] = pd.read_csv(url)

您可以通过以下方式从字典中访问“stock1”的数据框

df = all_data_dict['stock1']

您还可以使用pandas.DataFrame.diff来查找与下一个值的差异并**用于获取平方

rolled_s1_sq_r = (np.log(df.close).diff()**2).rolling(window=5).sum()
于 2020-01-21T12:22:14.577 回答
0

也许这样会更好:

stocks = ['stock1', 'stock2', 'stock3']
for stock in stocks:
   url = f'http://mydata.com/q/c/?d={stock}%d1=20190101&d2=20200101'
   dfs = pd.read_csv(url)
于 2020-01-21T12:09:08.597 回答