Предупреждение 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)