Python Pandas中mean().round(2)报错:float对象无round属性
问题原因分析与解决办法
嗨,这个问题我刚入门Pandas的时候也踩过一模一样的坑!让我给你把前因后果讲清楚~
核心差异:返回对象的类型不同
这两种写法的本质区别,在于调用函数后返回的对象类型完全不一样:
- 当你调用
ratings['rating'].describe()时,返回的是一个Pandas Series对象。Pandas为Series类封装了专属的.round()方法,所以链式调用describe().round(2)可以正常执行。 - 而调用
ratings['rating'].mean()时,返回的是一个Python原生float对象。Python的基础float类型并没有内置.round()方法,这就是你触发AttributeError: 'float' object has no attribute 'round'报错的原因。
正确的写法示例
针对均值取两位小数的需求,你有两种常用的解决方式:
- 使用Python内置的
round()函数(最直接):
rounded_mean = round(ratings['rating'].mean(), 2)
这里是把float类型的均值作为参数传给内置函数round(),第二个参数指定保留的小数位数。
- 先将均值转为Pandas对象再调用
.round():
如果你习惯用Pandas的链式语法,可以先把单个float值转为Series,再调用方法:
# 方式一:用to_series()转换 rounded_mean = ratings['rating'].mean().to_series().round(2) # 方式二:用agg直接获取Series格式的均值 rounded_mean = ratings['rating'].agg('mean').round(2)
这两种写法都会返回一个Series对象,调用.round()就不会报错了。
小验证技巧
如果你不确定某个操作返回的是什么类型,可以用type()函数查看:
print(type(ratings['rating'].describe())) # 输出 <class 'pandas.core.series.Series'> print(type(ratings['rating'].mean())) # 输出 <class 'float'>
内容的提问来源于stack exchange,提问作者threwory
相关产品推荐
相关产品推荐

