2016-06-05 4 views
1

Я очень новичок в кодировании, но мне действительно нравится возиться с вытаскиванием данных из финансов Yahoo. Я до сих пор придумываю код, который вытягивает закрытую цену для выбранных тикеров и вычисляет ежемесячную% изменения - отображая ее как транспонированную таблицу с двумя столбцами. Когда вы возвращаете данные в фреймворке данных, я хочу иметь возможность указывать оба столбца с помощью .columns, но, похоже, он вообще не распознает левый столбец (тот, в котором есть тикеры). Когда я пытаюсь передать более одного элемента в .column, это дает мне ошибку, говоря, что есть только 1 столбец. Кто-нибудь знает, почему это было бы, и как я мог бы манипулировать данными, чтобы распознать левую колонку?Левая колонка не распознается при транспонировании - Yahoo finance pandas

symbols_list = ["AAPL", "TSLA"] 
    d = {} 
    for x in symbols_list: 
     try: 
      d[x] = web.DataReader(x, "yahoo", '2015-12-31') 
     except: 
      print "Can't find ", x 
    ticker = pd.Panel(d) 
    df1 = ticker.minor_xs('Adj Close') 
    daily = df1.resample('B', how=lambda x: x) 

    monthly_change = daily.pct_change(periods = 24) 

    past_month_change = monthly_change.tail(1) 

    transposed = past_month_change.transpose() 

    transposed.columns = ["Monthly % Change"] #This works, but only names the right column, not the left. 
+1

Столбцы можно взять список из нескольких пунктов. Вы проходите только один. – Parfait

+0

как @Parfait, уже сказал, что вы должны сделать это следующим образом: 'df.columns = ['col1', 'col2', 'colN']' или, альтернативно, вы можете это сделать: 'df = df.rename (columns = {'col1': 'left', 'col5': 'new_col_name'}) ' – MaxU

+0

Извините, может быть, я не был чист. Если я попробую передать более одного элемента, это дает мне ошибку, говоря, что есть только 1 столбец, но 2 столбца. – Andy

ответ

0

после выполнения кода я иметь следующее:

In [317]: transposed.columns 
Out[317]: DatetimeIndex(['2016-06-03'], dtype='datetime64[ns]', name='Date', freq='B') 

In [318]: transposed.info() 
<class 'pandas.core.frame.DataFrame'> 
Index: 2 entries, AAPL to TSLA 
Data columns (total 1 columns): 
2016-06-03 00:00:00 2 non-null object 
dtypes: object(1) 
memory usage: 32.0+ bytes 

теперь вы можете сбросить индекс и переименовать столбцы:

In [320]: transposed = transposed.reset_index() 

In [321]: transposed.columns = ['code', 'Monthly % Change'] 

In [322]: transposed 
Out[322]: 
    code Monthly % Change 
0 AAPL  0.0520737 
1 TSLA  -0.0943342 
+0

Отлично, это именно то, что я искал. Спасибо! – Andy

+0

@ Энди, всегда рад помочь! :) спасибо за принятие ответа! – MaxU