Panda 运行时警告无法比较类型 'Timestamp' 与类型 'str',无法比较的对象的排序顺序未定义
Panda runtime warning Cannot compare type 'Timestamp' with type 'str', sort order is undefined for incomparable objects
我目前正在为 coursera 计算金融做作业 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 数据类型时。
问题出在以下线路:
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
,它会给您一个漂亮的图表,但在计算均值 return 时也会考虑 SPY 市场数据。因此,为了在计算平均值时使用 "proper" 逻辑,解决方法是注释此行并使用此修改重新编译 QSTK。
希望这对您有所帮助。
此致,
丹尼尔
@DanielTC 感谢指出问题所在,我可以确认。
我认为逻辑是市场returns应该从个人中减去
每日股票 returns,因此您只剩下股票 gained/lost
我是这样解决的:
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]
@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)
我目前正在为 coursera 计算金融做作业 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 数据类型时。
问题出在以下线路:
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
,它会给您一个漂亮的图表,但在计算均值 return 时也会考虑 SPY 市场数据。因此,为了在计算平均值时使用 "proper" 逻辑,解决方法是注释此行并使用此修改重新编译 QSTK。
希望这对您有所帮助。
此致, 丹尼尔
@DanielTC 感谢指出问题所在,我可以确认。
我认为逻辑是市场returns应该从个人中减去 每日股票 returns,因此您只剩下股票 gained/lost
我是这样解决的:
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]
@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)