Предупреждение Panda Runtime не может сравнивать тип 'Timestamp' с типом 'str', порядок сортировки для несопоставимых объектов не определен

В настоящее время я работаю над домашним заданием 2 для вычислительных финансов.

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

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-файл, показывает количество произошедших событий, но не фактически рисует события. Я не уверен, почему это происходит. Я использую панды 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.

3 ответа

Решение

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

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 с этой модификацией.

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

С уважением, Даниэль

@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]

@ Атти, ты прав.

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)
Другие вопросы по тегам