Aucun type numérique à agréger - changement dans le comportement de groupby ()?
J'ai un problème avec certains groupy code qui, j'en suis sûre, une fois couru (sur un vieux pandas version). Sur 0,9, je reçois Pas de types numériques pour agréger erreurs. Des idées?
In [31]: data
Out[31]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2557 entries, 2004-01-01 00:00:00 to 2010-12-31 00:00:00
Freq: <1 DateOffset>
Columns: 360 entries, -89.75 to 89.75
dtypes: object(360)
In [32]: latedges = linspace(-90., 90., 73)
In [33]: lats_new = linspace(-87.5, 87.5, 72)
In [34]: def _get_gridbox_label(x, bins, labels):
....: return labels[searchsorted(bins, x) - 1]
....:
In [35]: lat_bucket = lambda x: _get_gridbox_label(x, latedges, lats_new)
In [36]: data.T.groupby(lat_bucket).mean()
---------------------------------------------------------------------------
DataError Traceback (most recent call last)
<ipython-input-36-ed9c538ac526> in <module>()
----> 1 data.T.groupby(lat_bucket).mean()
/usr/lib/python2.7/site-packages/pandas/core/groupby.py in mean(self)
295 """
296 try:
--> 297 return self._cython_agg_general('mean')
298 except DataError:
299 raise
/usr/lib/python2.7/site-packages/pandas/core/groupby.py in _cython_agg_general(self, how, numeric_only)
1415
1416 def _cython_agg_general(self, how, numeric_only=True):
-> 1417 new_blocks = self._cython_agg_blocks(how, numeric_only=numeric_only)
1418 return self._wrap_agged_blocks(new_blocks)
1419
/usr/lib/python2.7/site-packages/pandas/core/groupby.py in _cython_agg_blocks(self, how, numeric_only)
1455
1456 if len(new_blocks) == 0:
-> 1457 raise DataError('No numeric types to aggregate')
1458
1459 return new_blocks
DataError: No numeric types to aggregate
source d'informationauteur andreas-h | 2012-10-11
Vous devez vous connecter pour publier un commentaire.
Comment êtes-vous la production de vos données?
Voir comment le résultat montre que vos données est de l '"objet" type? l'égard du groupe des opérations spécifiquement vérifier si chaque colonne est numérique dtype premier.
look ↑
Avez-vous initialiser un vide DataFrame d'abord, puis rempli? Si oui c'est probablement pourquoi il a changé avec la nouvelle version avant de 0,9 vide DataFrames ont été initialisés de type float, mais maintenant ils sont de type objet. Si oui, vous pouvez changer l'initialisation de la
DataFrame(dtype=float)
.Vous pouvez également appeler
frame.astype(float)
J'ai eu cette erreur de la génération d'un bloc de données comprenant des horodateurs et des données:
L'ajout de la solution proposée fonctionne pour moi:
Grâce Chang Elle!
Exemple: