D'erreur lorsque vous tentez d'appliquer la méthode de journalisation pour les pandas trame de données de la colonne en Python

Donc, je suis très nouveau à Python et les Pandas (et de la programmation en général), mais je suis en difficulté avec une apparence simple fonction. J'ai donc créé le dataframe à l'aide de données extraites avec une requête SQL (si vous avez besoin de voir la requête SQL, laissez-moi savoir et je vais coller)

spydata = pd.DataFrame(row,columns=['date','ticker','close', 'iv1m', 'iv3m'])
tickerlist = unique(spydata[spydata['date'] == '2013-05-31'])

Après cela, j'ai écrit une fonction pour créer de nouvelles colonnes dans le dataframe en utilisant les données déjà contenues dans:

def demean(arr):
    arr['retlog'] = log(arr['close']/arr['close'].shift(1))

    arr['10dvol'] = sqrt(252)*sqrt(pd.rolling_std(arr['ret'] , 10 ))  
    arr['60dvol'] = sqrt(252)*sqrt(pd.rolling_std(arr['ret'] , 10 ))  
    arr['90dvol'] = sqrt(252)*sqrt(pd.rolling_std(arr['ret'] , 10 ))  
    arr['1060rat'] = arr['10dvol']/arr['60dvol']
    arr['1090rat'] = arr['10dvol']/arr['90dvol']
    arr['60dis'] = (arr['1060rat'] - arr['1060rat'].mean())/arr['1060rat'].std()
    arr['90dis'] = (arr['1090rat'] - arr['1090rat'].mean())/arr['1090rat'].std()
    return arr

La seule partie que je vais avoir un problème avec est la première ligne de la fonction:

arr['retlog'] = log(arr['close']/arr['close'].shift(1))

Qui, quand je le lance, avec cette commande, j'obtiens une erreur:

result = spydata.groupby(['ticker']).apply(demean)

Erreur:

    ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-196-4a66225e12ea> in <module>()
----> 1 result = spydata.groupby(['ticker']).apply(demean)
2 results2 = result[result.date == result.date.max()]
3 
C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\core\groupby.pyc in apply(self, func, *args, **kwargs)
323         func = _intercept_function(func)
324         f = lambda g: func(g, *args, **kwargs)
--> 325         return self._python_apply_general(f)
326 
327     def _python_apply_general(self, f):
C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\core\groupby.pyc in _python_apply_general(self, f)
326 
327     def _python_apply_general(self, f):
--> 328         keys, values, mutated = self.grouper.apply(f, self.obj, self.axis)
329 
330         return self._wrap_applied_output(keys, values,
C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\core\groupby.pyc in apply(self, f, data, axis, keep_internal)
632             # group might be modified
633             group_axes = _get_axes(group)
--> 634             res = f(group)
635             if not _is_indexed_like(res, group_axes):
636                 mutated = True
C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\core\groupby.pyc in <lambda>(g)
322         """
323         func = _intercept_function(func)
--> 324         f = lambda g: func(g, *args, **kwargs)
325         return self._python_apply_general(f)
326 
<ipython-input-195-47b6faa3f43c> in demean(arr)
1 def demean(arr):
----> 2     arr['retlog'] = log(arr['close']/arr['close'].shift(1))
3     arr['10dvol'] = sqrt(252)*sqrt(pd.rolling_std(arr['ret'] , 10 ))
4     arr['60dvol'] = sqrt(252)*sqrt(pd.rolling_std(arr['ret'] , 10 ))
5     arr['90dvol'] = sqrt(252)*sqrt(pd.rolling_std(arr['ret'] , 10 ))
AttributeError: log

J'ai essayé de changer la fonction de np.journal de mathématiques.journal, dans ce cas, je reçois le message d'erreur

TypeError: only length-1 arrays can be converted to Python scalars

J'ai essayé de regarder, mais je n'ai pas trouvé quoi que ce soit directement applicable. Toute indices?

OriginalL'auteur user2460677 | 2013-06-06