Python 属性错误:';numpy.int64';对象没有属性';到"pydatetime"和"x27 ;;
我是Python新手。我已经开始使用pyfolio库,当我键入以下代码时Python 属性错误:';numpy.int64';对象没有属性';到"pydatetime"和"x27 ;;,python,numpy,datetime,attributes,Python,Numpy,Datetime,Attributes,我是Python新手。我已经开始使用pyfolio库,当我键入以下代码时 pf.create_returns_tear_sheet(data['New_Adjusted_Returns'],benchmark_rets=None) 发生名为的错误,如下所示: AttributeError: 'numpy.int64' object has no attribute 'to_pydatetime' 数据['New_Adjusted_Returns']由以下数据组成: Date 2020-02-
pf.create_returns_tear_sheet(data['New_Adjusted_Returns'],benchmark_rets=None)
发生名为的错误,如下所示:
AttributeError: 'numpy.int64' object has no attribute 'to_pydatetime'
数据['New_Adjusted_Returns']由以下数据组成:
Date
2020-02-14 -0.004500
2020-02-17 -0.022107
2020-02-18 -0.000029
2020-02-19 -0.000800
2020-02-20 -0.017102
2020-02-21 -0.000028
2020-02-24 0.014400
2020-02-25 0.007900
2020-02-26 -0.001000
2020-02-27 -0.000517
2020-02-28 -0.000029
Would someone be able to help me on this issue? Thank you very much.
通过更改文件timeseries.py中的第893行修复了此问题
valley = underwater.index[np.argmin(underwater)] # end of the period
从错误消息中检索错误代码文件,例如:
!cat/usr/local/lib/python3.7/site packages/pyfolio/timeseries.py
将输出复制到notepade++,并将涉及*.to_pydatetime()的第1005、1008和1015行表达式替换为
分别
将修改后的内容复制到以开头的单元格中
%%writefile/usr/local/lib/python3.7/site packages/pyfolio/timeseries.py
并执行它以覆盖原始文件
然后在重新运行pf之前执行以下操作。例如,创建导致此错误的完整撕裂表(数据):
%load_ext autoreload
%autoreload 2
我pip安装了pyfolio,并且得到了相同的错误 经过一番挖掘,我发现了这个函数:
def get_max_drawdown_underwater(underwater):
...
valley变量定义错误,导致返回的变量类型为nump.int64,而不是函数描述中所述的时间戳
vallay = underwater.index[np.argmin(underwater)] # np.argmin(underwater)
白色是我写的,注释是我从pip安装中得到的
现在显示所有指标和图表:
我在华为笔记本电脑上遇到了同样的问题,但在我的表面上没问题。 我通过以下更正解决了这个问题 在第894行,更换
valley = np.argmin(underwater)
与
在第897行,更换
peak=valley = np.argmin(underwater)
与
在第901行,更换
recovery=underwater[valley:][underwater[valley:] == 0]
与
#####################
如果在应用上述解决方案后,
to_pydatetime
仍然存在错误,您可以将to_pydatetime().strftime(“%Y-%m-%d”)
替换为.strftime(“%Y-%m-%d”)
在第1010、1013和1018行。在中,基准测试=None
是多余的,因为这是该命名参数的默认值。显然,您要传递到.create\u returns\u tear\u sheet()
的数据不是预期的格式,并且预期的是pandas datetime而不是numpy 64位整数。您已经提供了加载后数据的打印输出,但是如何加载它以及从何处加载?我从数据框中提取了日期索引和列值,因此我假设它不应该在numpy中。我检查了数据,日期是datetime对象,值是float 64。我真的不知道为什么会出现这样的错误。.数据的类型是什么,数据是如何构造的,数据来自哪里?数据的类型是float64。我通过使用pandas库使用导入的csv文件中的数据来构建它们。可以在这里获取数据:data
变量的类型是pandas.DataFrame
?您链接的URL为说英语的人提供了获取.csv文件的简单方法-请在您的问题中提供一些示例数据,以及您用于阅读该文件的代码示例。Hi@Mandlenkosi Ngcobo。请不要张贴代码的图片。而是使用代码块,因为它很容易复制和通过。而且格式对你来说也更容易。
peak=valley = np.argmin(underwater)
temp1=underwater[:valley][underwater[:valley] == 0].dropna(axis=0,how='any')
peak = temp1.index[-1]
recovery=underwater[valley:][underwater[valley:] == 0]
temp2=underwater[valley:][underwater[valley:] == 0].dropna(axis=0,how='any')
recovery = temp2.index[0]