comprendre les erreurs de calcul dans les pandas dataframes
Je suis en train de générer une nouvelle colonne de pandas dataframe à partir d'autres colonnes et obtiens des mathématiques des erreurs que je ne comprends pas. Voici un aperçu du problème et certains en simplifiant les diagnostics...
Je peux générer un bloc de données qui ressemble assez bonne:
import pandas
import math as m
data = {'loc':['1','2','3','4','5'],
'lat':[61.3850,32.7990,34.9513,14.2417,33.7712],
'lng':[-152.2683,-86.8073,-92.3809,-170.7197,-111.3877]}
frame = pandas.DataFrame(data)
frame
Out[15]:
lat lng loc
0 61.3850 -152.2683 1
1 32.7990 -86.8073 2
2 34.9513 -92.3809 3
3 14.2417 -170.7197 4
4 33.7712 -111.3877 5
5 rows × 3 columns
Je peux faire des mathématiques simples (c'est à dire des degrés en radians):
In [32]:
m.pi*frame.lat/180.
Out[32]:
0 1.071370
1 0.572451
2 0.610015
3 0.248565
4 0.589419
Name: lat, dtype: float64
Mais je ne peux pas convertir des degrés en radians à l'aide de l'python bibliothèque de mathématiques:
In [33]:
m.radians(frame.lat)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-99a986252f80> in <module>()
----> 1 m.radians(frame.lat)
/Users/user/anaconda/lib/python2.7/site-packages/pandas/core/series.pyc in wrapper(self)
72 return converter(self.iloc[0])
73 raise TypeError(
---> 74 "cannot convert the series to {0}".format(str(converter)))
75 return wrapper
76
TypeError: cannot convert the series to <type 'float'>
Et ne peut même pas convertir les valeurs de flotteurs pour essayer de le forcer à travailler:
In [34]:
float(frame.lat)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-34-3311aee92f31> in <module>()
----> 1 float(frame.lat)
/Users/user/anaconda/lib/python2.7/site-packages/pandas/core/series.pyc in wrapper(self)
72 return converter(self.iloc[0])
73 raise TypeError(
---> 74 "cannot convert the series to {0}".format(str(converter)))
75 return wrapper
76
TypeError: cannot convert the series to <type 'float'>
Je suis sûr qu'il doit y avoir une explication simple et vous remercie de votre aide à le trouver. Merci!
OriginalL'auteur user3654387 | 2014-05-19
Vous devez vous connecter pour publier un commentaire.
fonctions mathématiques telles que les mathématiques.radians s'attendre à une valeur numérique comme un float, pas une séquence comme un
pandas.Series
.Au lieu de cela, vous pouvez utiliser numpy.radians, depuis
numpy.radians
peut accepter un tableau en entrée:Seule Série de longueur 1 peut être converti en
float
. Ainsi, alors quecela fonctionne,
en général, il ne le fait pas:
math.radians
appellefloat
sur son argument. Notez que vous recevez le même message d'erreur appelfloat
surpd.Series([1,2])
:OriginalL'auteur unutbu
J'ai eu un problème similaire, mais a l'aide d'une fonction personnalisée. La solution a été d'utiliser le
apply
fonction:Maintenant, j'ai une nouvelle colonne avec mon simple (mais beau) de calcul appliquée à chaque ligne du bloc de données!
OriginalL'auteur AnthonySCaldera
essayer:
Quand j'ai eu la même erreur, c'est ce qui a fonctionné pour moi.
OriginalL'auteur ANNE ANGELINA