@@ -189,7 +189,8 @@ def get_cagr(ror: Union[pd.DataFrame, pd.Series]) -> Union[pd.Series, float]:
189189 Return Compound Annual Rate of Return (CAGR) for each asset given returns time series DataFrame.
190190 """
191191 if ror .shape [0 ] < 12 :
192- return pd .Series ({x : None for x in ror .columns }) # CAGR is not defined for periods < 1 year
192+ # CAGR is not defined for periods < 1 year. Return None or Series with NaNs.
193+ return pd .Series ({x : None for x in ror .columns }) if isinstance (ror , pd .DataFrame ) else None
193194 return ((ror + 1.0 ).prod ()) ** (settings ._MONTHS_PER_YEAR / ror .shape [0 ]) - 1.0
194195
195196 @staticmethod
@@ -360,13 +361,14 @@ def condition(y):
360361 return df
361362
362363 @staticmethod
363- def skewness (ror : Union [pd .DataFrame , pd .Series ]) -> Union [pd .Series , float ]:
364+ def skewness (ror : Union [pd .DataFrame , pd .Series ]) -> Union [pd .DataFrame , pd . Series ]:
364365 """
365366 Calculate expanding skewness.
366367 The shape of time series should be at least 12. In the opposite case empty time series is returned.
367368 """
368- sk = ror .expanding (min_periods = 1 ).skew ()
369- return sk .iloc [settings ._MONTHS_PER_YEAR :]
369+ sk = ror .expanding (min_periods = 12 ).skew ()
370+ sk .dropna (inplace = True )
371+ return sk
370372
371373 @staticmethod
372374 def skewness_rolling (ror : Union [pd .DataFrame , pd .Series ], window : int = 60 ) -> Union [pd .Series , float ]:
@@ -385,8 +387,9 @@ def kurtosis(ror: Union[pd.Series, pd.DataFrame]):
385387 Calculate expanding Fisher (normalized) kurtosis time series.
386388 Kurtosis should be close to zero for normal distribution.
387389 """
388- kt = ror .expanding (min_periods = 1 ).kurt ()
389- return kt .iloc [settings ._MONTHS_PER_YEAR :]
390+ kt = ror .expanding (min_periods = 12 ).kurt ()
391+ kt .dropna (inplace = True )
392+ return kt
390393
391394 @staticmethod
392395 def kurtosis_rolling (ror : Union [pd .Series , pd .DataFrame ], window : int = 60 ):
0 commit comments