当前位置 : 主页 > 手机开发 > 其它 >

使用GroupBy获取Pandas的平均值 – 获取DataError:没有要聚合的数字类型 –

来源:互联网 收集:自由互联 发布时间:2021-06-22
我知道有很多问题,比如 Getting daily averages with pandas 和 How get monthly mean in pandas using groupby但我得到一个奇怪的错误. 简单数据集,带有一个索引列(类型时间戳)和一个值列. 想获得数据的月
我知道有很多问题,比如 Getting daily averages with pandas
和 How get monthly mean in pandas using groupby但我得到一个奇怪的错误.

简单数据集,带有一个索引列(类型时间戳)和一个值列.
想获得数据的月平均值.

In [76]: df.head()
Out[76]: 
                          A
2008-01-02                1
2008-01-03                2
2008-01-04                3
2008-01-07                4
2008-01-08                5

但是,当我分组时,我只得到索引的组而不是值

In [74]: df.head().groupby(lambda x: x.month).groups
Out[74]: 
{1: [Timestamp('2008-01-02 00:00:00'),
  Timestamp('2008-01-03 00:00:00'),
  Timestamp('2008-01-04 00:00:00'),
  Timestamp('2008-01-07 00:00:00'),
  Timestamp('2008-01-08 00:00:00')]}

尝试采用means()会导致错误:

尝试了df.head().resample(“M”,how =’mean’)和df.head().groupby(lambda x:x.month).mean()

并获取错误:DataError:没有要聚合的数字类型

In [75]: df.resample("M", how='mean')
---------------------------------------------------------------------------
DataError                                 Traceback (most recent call last)
<ipython-input-75-79dc1a060ba4> in <module>()
----> 1 df.resample("M", how='mean')

/usr/local/lib/python2.7/site-packages/pandas/core/generic.pyc in resample(self, rule, how, axis, fill_method, closed, label, convention, kind, loffset, limit, base)
   2878                               fill_method=fill_method, convention=convention,
   2879                               limit=limit, base=base)
-> 2880         return sampler.resample(self).__finalize__(self)
   2881 
   2882     def first(self, offset):

/usr/local/lib/python2.7/site-packages/pandas/tseries/resample.pyc in resample(self, obj)
     82 
     83         if isinstance(ax, DatetimeIndex):
---> 84             rs = self._resample_timestamps()
     85         elif isinstance(ax, PeriodIndex):
     86             offset = to_offset(self.freq)

/usr/local/lib/python2.7/site-packages/pandas/tseries/resample.pyc in _resample_timestamps(self)
    286             # Irregular data, have to use groupby
    287             grouped = obj.groupby(grouper, axis=self.axis)
--> 288             result = grouped.aggregate(self._agg_method)
    289 
    290             if self.fill_method is not None:

/usr/local/lib/python2.7/site-packages/pandas/core/groupby.pyc in aggregate(self, arg, *args, **kwargs)
   2436     def aggregate(self, arg, *args, **kwargs):
   2437         if isinstance(arg, compat.string_types):
-> 2438             return getattr(self, arg)(*args, **kwargs)
   2439 
   2440         result = OrderedDict()

/usr/local/lib/python2.7/site-packages/pandas/core/groupby.pyc in mean(self)
    664         """
    665         try:
--> 666             return self._cython_agg_general('mean')
    667         except GroupByError:
    668             raise

/usr/local/lib/python2.7/site-packages/pandas/core/groupby.pyc in _cython_agg_general(self, how, numeric_only)
   2356 
   2357     def _cython_agg_general(self, how, numeric_only=True):
-> 2358         new_items, new_blocks = self._cython_agg_blocks(how, numeric_only=numeric_only)
   2359         return self._wrap_agged_blocks(new_items, new_blocks)
   2360 

/usr/local/lib/python2.7/site-packages/pandas/core/groupby.pyc in _cython_agg_blocks(self, how, numeric_only)
   2406 
   2407         if len(new_blocks) == 0:
-> 2408             raise DataError('No numeric types to aggregate')
   2409 
   2410         return data.items, new_blocks

DataError: No numeric types to aggregate
是的,你应该尝试使用像df [‘A’] = df [‘A’].astype(int)之类的东西来强制A到数字.可能值得检查初始数据读入中是否有任何内容导致它成为对象而不是数字.
网友评论