Python 我的意思是“给我”;没有要聚合的数字类型";-但是.sum()是有效的
我在Python 3中的熊猫中工作。出于某种原因,我可以按分组,然后对数据帧求和: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
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
还有一个额外功能,用于处理非数字数据。请提供一个副本来重现问题。可能的副本请提供一个副本来重现问题。可能的副本非常有效,谢谢。我不知道数据类型与单元格对象的类型无关。非常感谢!这很有效,谢谢。我不知道数据类型与单元格对象的类型无关。非常感谢!