Pandas 2.0.3调用df.mean()报错,0.23.3无此问题的原因?
Pandas 2.0.3调用df.mean()报错的原因解析
版本间的核心行为差异
- Pandas 0.23.3里,
df.mean()会自动跳过非数值型列,只对能计算均值的数值列处理,哪怕DataFrame里混着字符串列,也不会触发类型转换错误。 - Pandas 2.0.3(属于2.x系列)对数据类型的校验逻辑更严格:
df.mean()会尝试遍历所有列计算均值,如果某列包含字符串且无法转成数值,直接抛出ValueError: could not convert string to float。
为什么df.describe().mean()能正常运行?
df.describe()默认只针对数值型列生成统计数据(比如均值、标准差等),自动过滤掉非数值列。后续调用.mean(),只是对这些统计结果里的数值再求均值,全程碰不到字符串列的类型转换问题,所以不会报错。
更直接的解决方案
如果不想绕弯子用describe(),可以直接用这两种方式:
- 只筛选数值列计算:
df.select_dtypes(include='number').mean() - 给
mean()加参数指定只处理数值:df.mean(numeric_only=True)(Pandas 1.0及以上版本支持)
内容的提问来源于stack exchange,提问作者hasan
相关产品推荐
相关产品推荐

