首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.sum groupby.mean()告诉我“没有要聚合的数值类型”--但是Pandas ()可以工作

.sum groupby.mean()告诉我“没有要聚合的数值类型”--但是Pandas ()可以工作
EN

Stack Overflow用户
提问于 2018-09-12 06:52:39
回答 1查看 1.6K关注 0票数 0

我在Python 3中的Pandas中工作。出于某种原因,我可以分组,然后对我的数据帧求和():

代码语言:javascript
复制
full_data.groupby('polarity')['pos'].sum()

polarity
both      1.842
neg       5.241
neu     496.026
pos     245.105
Name: pos, dtype: float64

但是,当我将均值替换为sum时,我得到了这个错误:

代码语言:javascript
复制
DataError: No numeric types to aggregate

你知道为什么会这样吗?我已经确认了'pos‘列中的每一项都是一个浮点数,运行以下没有输出的代码:

代码语言:javascript
复制
for i in full_data.loc[:,'pos']:
if type(i) != float:
    print('not a float')

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-12 07:25:21

summean的行为不同。考虑以下示例:

代码语言:javascript
复制
In [2]: df = pd.DataFrame({'key': ['a', 'b', 'b'], 'val': [1.2, 2.3, 3.4]})


In [3]: df.groupby('key').val.sum()
Out[3]:
key
a    1.2
b    5.7
Name: val, dtype: float64

In [4]: df.groupby('key').val.mean()
Out[4]:
key
a    1.20
b    2.85
Name: val, dtype: float64

In [7]: df.dtypes
Out[7]:
key     object
val    float64
dtype: object

现在,如果我更改val列,使其成为对象的数据类型:

代码语言:javascript
复制
In [8]: df['val'] = df.val.astype(object)

In [9]: df.groupby('key').val.mean()
---------------------------------------------------------------------------
DataError                                 Traceback (most recent call last)
<ipython-input-9-b46b3a9673d0> in <module>()
----> 1 df.groupby('key').val.mean()

~\Miniconda3\lib\site-packages\pandas\core\groupby\groupby.py in mean(self, *args, **kwargs)
   1304         nv.validate_groupby_func('mean', args, kwargs, ['numeric_only'])
   1305         try:
-> 1306             return self._cython_agg_general('mean', **kwargs)
   1307         except GroupByError:
   1308             raise

~\Miniconda3\lib\site-packages\pandas\core\groupby\groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_c
ount)
   1054
   1055         if len(output) == 0:
-> 1056             raise DataError('No numeric types to aggregate')
   1057
   1058         return self._wrap_aggregated_output(output, names)

DataError: No numeric types to aggregate

In [10]: df.groupby('key').val.sum()
Out[10]:
key
a    1.2
b    5.7
Name: val, dtype: float64

请注意,mean不再适用于该列

列的数据类型与各个单元格的数据类型无关,例如:

代码语言:javascript
复制
In [12]: isinstance(df.val[0], float)
Out[12]: True

因此,请检查您的列数据类型并将其转换为数字。

现在为什么在设计上meansum的行为是不同的,因为只要such对该数据类型有意义,就应该允许sum作用于非数值数据,比如str

代码语言:javascript
复制
In [14]: df['val'] = ['z', 'y', 'x']

In [15]: df.groupby('key').val.sum()
Out[15]:
key
a     z
b    yx
Name: val, dtype: object

显然,对于str来说,mean没有任何意义。因此,sum有一个额外的try-except block,使它可以处理非数字数据。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52285181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档