2016-08-15 87 views
2

我目前正在为coursera计算金融学做作业2。熊猫运行时警告无法将类型'时间戳'与类型'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文件,显示发生的事件的数量而不是实际绘制的事件。我不知道为什么会发生这种情况。我正在使用熊猫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

你可以添加数据和dtype的样本吗? – jezrael

+0

@jezrael我已经更新了日志样本的问题。事件配置文件需要一个矩阵,所以让d_data作为字典不应该是个问题吧? – 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。

希望这会有所帮助。

问候, 丹尼尔

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) 
相关问题