2016-08-15 1 views
2

В настоящее время я работаю над домашним заданием 2 для вычисления вычислительной техники coursera.Предупреждение о запуске Panda Невозможно сравнить тип «Timestamp» с типом «str», порядок сортировки не определен для несравнимых объектов.

При выполнении этой строки:

ep.eventprofiler(df_events, d_data, i_lookback=20, i_lookforward=20, 
      s_filename=report_filename, b_market_neutral=True, b_errorbars=True, 
      s_market_sym='SPY') 

Я получаю ошибку:

anaconda/lib/python2.7/site-packages/pandas/indexes/base.py:2397: RuntimeWarning: Cannot compare type 'Timestamp' with type 'str', sort order is undefined for incomparable objects 
    return this.join(other, how=how, return_indexers=return_indexers) 

который создает файл PDF, показывает количество событий, произошедших, но на самом деле не рисуются события. Я не знаю, почему это происходит. Я использую pandas 0.18.0

Любые идеи? Я ценю помощь.

df_events.dtypes образец:

ALTR float64 
ALXN float64 
AMAT float64 
AMD  float64 
AMGN float64 
AMP  float64 
AMT  float64 
     ... 
WDC  float64 
WEC  float64 
WFC  float64 
WFM  float64 
WHR  float64 
WIN  float64 
WLP  float64 
WM  float64 
WMB  float64 
WMT  float64 
XLNX float64 
XOM  float64 
XRAY float64 
XRX  float64 
XYL  float64 
YHOO float64 
YUM  float64 
ZION float64 
ZMH  float64 
SPY  float64 
dtype: object 

Вот это d_data.dtypes войти образец:

  YHOO YUM ZION ZMH  SPY 
2008-01-02 16:00:00 23.72 37.88 45.29 66.29 144.93 
2008-01-03 16:00:00 23.84 37.35 44.38 66.36 144.86 
2008-01-04 16:00:00 23.16 36.82 42.40 66.50 141.31 
2008-01-07 16:00:00 23.18 37.68 43.28 68.66 141.19 

я получаю

d_data.dtypes 
*** AttributeError: 'dict' object has no attribute 'dtypes' 

при попытке распечатать d_data dtypes ,

+0

Похоже, 'dtype' некоторого столбца в некотором' DataFrame' не 'datetime', но' string'. Что такое 'print df_events.dtypes'? И если 'd_data' является' DataFrame', 'print d_data.dtypes'? – jezrael

+0

Можете ли вы добавить образец данных и dtypes? – jezrael

+0

@jezrael Я обновил вопрос с помощью образцов журнала. Профиль события принимает матрицу, поэтому с d_data как dict не должно быть проблемой? – Matt

ответ

4

проблема вызвана линии:

df_rets = df_rets - df_rets[s_market_sym] 

в этих двух линий:

if b_market_neutral == True: 
    df_rets = df_rets - df_rets[s_market_sym] 
    del df_rets[s_market_sym] 
    del df_events[s_market_sym] 

в eventprofiler(...) функции. Честно говоря, я думаю, что эта строка является ошибкой, и ее следует поставить как комментарий, если не сказать, поскольку логика, лежащая в основе, скрывает мое понимание. Другие просто прекрасны.

Если вы установили аргумент b_market_neutral на номер False, он даст вам хороший график, но также учитывает рыночные данные SPY при вычислении средней доходности. Поэтому обходной путь, чтобы использовать «правильную» логику при вычислении средних значений, заключался бы в комментировании этой строки и перекомпиляции QSTK с этой модификацией.

Надеюсь, это поможет.

С уважением, Daniel

3

@DanielTC спасибо за указание, где этот вопрос, я могу подтвердить это.

я думаю, что логика в том, что рынок возвращается должны быть вычтены из отдельных запасов ежедневно возвращается, так что вам остается только то, что акции получили/потеряли

Я решил так:

if b_market_neutral is True: 
    # it fails here: df_rets = df_rets - df_rets[s_market_sym] 
    df_rets = df_rets.sub(df_rets[s_market_sym].values, axis=0) # this works 
    del df_rets[s_market_sym] 
    del df_events[s_market_sym] 
1

@Atti, вы правы.

pandas.core.frame.DataFrame 

Expression df - df['A'] is deprecated after pandas release 0.15.2 

Warning 
df - df['A'] 
is now deprecated and will be removed in a future release. The preferred way to replicate this behavior is df.sub(df['A'], axis=0)