Panda运行时警告无法将类型'Timestamp'与'str'类型进行比较,对于无法比较的对象,未定义排序顺序

时间:2016-08-15 06:55:50

标签: python pandas computational-finance

我目前正致力于课程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文件,显示已发生但未实际绘制事件的事件数。我不确定为什么会这样。我正在使用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时。

3 个答案:

答案 0 :(得分: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。

希望这有帮助。

此致 丹尼尔

答案 1 :(得分: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]

答案 2 :(得分: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)