Python 我的意思是“给我”;没有要聚合的数字类型";-但是.sum()是有效的

Python 我的意思是“给我”;没有要聚合的数字类型";-但是.sum()是有效的,python,pandas,Python,Pandas,我在Python 3中的熊猫中工作。出于某种原因,我可以按分组,然后对数据帧求和: 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 aggregat

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

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
列更改为对象的数据类型:

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
sum
表现不同,因为
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
来说毫无意义。因此,
sum
还有一个额外的功能,使其适用于非数字数据。

sum
平均值
表现不同。考虑这些例子:

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
列更改为对象的数据类型:

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
sum
表现不同,因为
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
来说毫无意义。因此,
sum
还有一个额外功能,用于处理非数字数据。

请提供一个副本来重现问题。可能的副本请提供一个副本来重现问题。可能的副本非常有效,谢谢。我不知道数据类型与单元格对象的类型无关。非常感谢!这很有效,谢谢。我不知道数据类型与单元格对象的类型无关。非常感谢!