Python 3.x 使用Python查找平均值、模式和中值

Python 3.x 使用Python查找平均值、模式和中值,python-3.x,pandas,Python 3.x,Pandas,我试图计算数据帧中两列的平均值、模式和中间值。我想按COL1分组,并计算COL2的平均值、模式和中位数。有许多列和行,但我希望使用的2个示例如下所示 COL1 COL2 1 (0-9) 64 2 (10-19) 74 3 (20-29) 64 4 (0-9) 62 我一直在尝试以下代码,但不断出现错误: data.groupby('COL1')['COL2'].mean() 如果我只使用COL1进行分组,则会

我试图计算数据帧中两列的平均值、模式和中间值。我想按COL1分组,并计算COL2的平均值、模式和中位数。有许多列和行,但我希望使用的2个示例如下所示

    COL1      COL2    
1   (0-9)      64  
2   (10-19)    74   
3   (20-29)    64
4   (0-9)      62
我一直在尝试以下代码,但不断出现错误:

data.groupby('COL1')['COL2'].mean()
如果我只使用COL1进行分组,则会返回其他两列的平均值(和中位数,但不是模式)精细,但不是COL2:

data1 = data.groupby(['COL1']).mean()
我认为COL2作为对象显示可能有问题,但我很难解决这个问题。错误示例如下所示:


pandas.core.base.DataError:没有要聚合的数值类型

您可以将类型设置为
int
,然后使用
pd.Series.mode
计算模式(以及平均值和中值)

如果一个组没有单一模式,您可以取
pd.Series.mode
返回的模式的平均值。只需用注释的
lambda
函数替换模式即可


单个值的平均值不会改变模式。如果找不到单一模式,请随意将函数更改为您定义的模式。

什么是df.dtype如果我这样做,则dtypes COL2将显示为对象,COL1也是。谢谢,但第一行导致错误,如下所示。这让我再次查看了CSV,这些数据最初来自于我注意到有一些空白数据。我尝试用null填充它,当它同时为空和null时,我得到以下结果:ValueError:invalid literal for int()以10为基数:“null”数据中有null值。在第一行之前添加df=df.notna()。我已经尝试过了,但是现在我所有的其他列都返回bool,所以COL1现在显示:False True,应该是:COL1(0-9)(10-19)(20-29)(0-9)更新了我的答案,请检查。也请阅读了解如何调试代码。谢谢别担心。试着围绕你所面临的问题写另一个问题。也许更多的人也能帮助解决这些问题。谢谢
df = df[df.notna()] #Handling nans
df['COL2'] = df['COL2'].astype(float)

mode = pd.Series.mode

#INCASE OF ValueError: Must produce aggregated value, Use this for mode
#mode = lambda x: pd.Series.mean(pd.Series.mode(x))

out = df.groupby("COL1")["COL2"].agg(['mean','median', mode])
print(out)