L oop для импорта и расчета доходности акций из нескольких CSV в Python - PullRequest
0 голосов
/ 21 января 2020

Возможно глупый вопрос, но я новичок. Я использую приведенный ниже код для расчета доходности акций и квадратов журналов:

#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 акций ... Как я могу поставить выше в l oop?

Я думаю, что l oop для чтения 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, и я понятия не имею, как l oop Остальные расчеты.

Спасибо за любые предложения, указания, подсказки.

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Может быть, это будет работать лучше:

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)
0 голосов
/ 21 января 2020

вы можете прочитать все значения в словаре (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()
0 голосов
/ 21 января 2020

Отступ может быть вашей проблемой здесь. Попробуйте это:

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))

Обратите внимание на отступ внутри для l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...