Pandas groupby.mean()给我“没有数字类型聚合” - 但.sum()有效

Pandas groupby.mean()给我“没有数字类型聚合” - 但.sum()有效?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 ( 1 )
  • 关注 ( 0 )
  • 查看 ( 6145 )

我在Python 3中使用Pandas。出于某种原因,我可以分组,然后sum()我的数据帧:

full_data.groupby('polarity')['pos'].sum()

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

当我换出平均金额,不过,我得到这个错误:

DataError: No numeric types to aggregate

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

for i in full_data.loc[:,‘pos’]:
if type(i) != float:
print(‘not a float’)

谢谢你的帮助!

写回答关注邀请回答
提问于
用户回答回答于

sum并且mean行为不同。考虑这些例子:

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列,使其作为对象的dtype:

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该列不再适用

列的dtype与单个单元格的dtype无关,例如:

In [12]: isinstance(df.val[0], float)
Out[12]: True

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

现在为什么设计meansum行为不同,因为sum应该允许对非数值数据进行操作,例如str,只要求和对该数据类型有意义。

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

显然,mean没有任何意义str。因此有一个额外的try-exceptsum使其非数值算的数据。

猜你喜欢

转载自blog.csdn.net/weixin_51267929/article/details/113810870