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
Vous devez vous connecter pour publier un commentaire.
Cela se produit lorsque le type de données de la colonne n'est pas numérique. Essayez
Je soupçonne que les nombres sont stockés en tant que générique de 'l'objet' types, qui, je le sais causes journal de jeter cette erreur. Ici est une simple illustration du problème:
Votre tentative avec
math.log
n'a pas de travail car cette fonction est conçue pour les nombres simples (scalaires) seulement, et non pas des listes ou des tableaux.Pour ce que ça vaut, je pense que c'est une source de confusion message d'erreur; une fois perplexe moi pendant un certain temps, de toute façon. Je me demande si cela peut être amélioré.
pourquoi ne pas vous ouvrir sur de voir si il y a des situations où cette erreur peut être pris au piège / améliorée
ressemble wes posté ceci sur numpy il y a quatre ans... github.com/numpy/numpy/issues/1611 (!)
wow....ils sont fermant les questions rapides 🙂
Fait: github.com/pydata/pandas/issues/3781
OriginalL'auteur Dan Allan