python - Pands - 错误:数字列上的“没有要聚合的数字类型”
问题描述
我正在尝试按字符串列 ( b
) 对数据框进行分组,并在另一列 () 上获取平均值a
。这样做时,我得到一个我目前不明白的错误。
import pandas as pd
df = pd.DataFrame({
1 : {'a':10,'b':'string1'},
2 : {'a':20,'b':'string1'},
3 : {'a':30,'b':'string1'},
4 : {'a':1,'b':'string2'}
}).T
df.groupby('b')['a'].mean()
我得到了错误:
DataError: No numeric types to aggregate
我已经尝试通过“手”聚合并且它有效,所以我不明白这里的熊猫问题是什么
df_agg = {}
for g in df_grouped.groups:
df_agg[g] = df_grouped.get_group(g)['a'].mean()\
df_agg
返回: {'string1': 20.0, 'string2': 1.0}
如我所愿。
解决方案
您收到错误是因为both columns are object type
.
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 1 to 4
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 a 4 non-null object
1 b 4 non-null object
dtypes: object(2)
memory usage: 96.0+ bytes
解决方案
我们需要将其转换column a
为 int 以使其变为numeric type
然后对其应用均值。
df.a = df.a.astype(int)
df = df.groupby('b', as_index=False).mean()
输出
b a
0 string1 20
1 string2 1
来自熊猫文档
注意:任何对象列,如果它包含数值,例如小数对象,则被视为“讨厌”列。它们在 groupby 中自动从聚合函数中排除。
如果您确实希望在具有其他非有害数据类型的聚合中包含十进制或对象列,则必须明确地这样做。
推荐阅读
- java - com.fasterxml.jackson.databind.node.IntNode 不能转换为 com.fasterxml.jackson.databind.node.ObjectNode
- google-maps-api-3 - 如何在 Google Maps v3 中旋转包含 GroundOverlay 的 KML 图层
- python - 如何让这段代码更简洁易读
- sql - “With”命令比使用临时表慢 Select * into #table1 from
- react-native - 在图像的上角放置一个“x”,用于删除(React Native)
- python - Python 调用当前目录
- javascript - 如何使用 javascript 的 kubernetes-client 编写 CRD?
- sql - Access/Excel集成:如何避免同时用户之间的冲突?
- python - QTableView HorizontalHeader 让它非常滞后?
- uwp - 是否需要 Windows 应用程序认证套件流程?