pyfolio

pyfolio 는 2023-06: pyfolio 업그레이드 안되고 있어서…

iteritems()

Pandas 의 DataFrame.iteritems 메서드가 Deprecated since version 1.5.0 상태이다.

pf.create_simple_tear_sheet(portfolio_returns)

1
2
3
pyfolio\tears.py:359,
...
AttributeError: 'Series' object has no attribute 'iteritems'

perf_stats[column].items() 로 변경했다ㅏ.

to_pydatetime error

pf.create_returns_tear_sheet(portfolio_returns)

https://stackoverflow.com/questions/63554616/ 에 설명 894, 897, 901 라인을 수정.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

I met the same question in my huawei laptop,but it's ok in my Surface. I solved this problem by following corrections.

On line 894, replace

valley = np.argmin(underwater)
with

valley=underwater.index[np.argmin(underwater)]
On line 897, replace

peak=valley = np.argmin(underwater)
with

temp1=underwater[:valley][underwater[:valley] == 0].dropna(axis=0,how='any')
peak = temp1.index[-1]
On line 901, replace

recovery=underwater[valley:][underwater[valley:] == 0]
with

temp2=underwater[valley:][underwater[valley:] == 0].dropna(axis=0,how='any')
recovery = temp2.index[0]

그리고 1006 라인 의 peak.to_pydatetime()

1
2
3
4
5
6
7
8
9
pyfolio\timeseries.py:1008, in gen_drawdown_table(returns, top)
1006 df_drawdowns.loc[i, 'Peak date'] = (peak.to_pydatetime()
1007 .strftime('%Y-%m-%d'))
-> 1008 df_drawdowns.loc[i, 'Valley date'] = (valley.to_pydatetime()
1009 .strftime('%Y-%m-%d'))
1010 if isinstance(recovery, float):
1011 df_drawdowns.loc[i, 'Recovery date'] = recovery

AttributeError: 'numpy.int64' object has no attribute 'to_pydatetime'

1008 라인
1
2
3
(peak).strftime('%Y-%m-%d')
(valley.strftime('%Y-%m-%d')
(recovery).strftime('%Y-%m-%d')

pd.to_datetime(peak)
pd.to_datetime(valley
pd.to_datetime(recovery)