Python 属性错误:';numpy.int64';对象没有属性';到"pydatetime"和"x27 ;;

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-

我是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-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]