在pandas 2.0.3中查找均值时出现错误

-1 投票
3 回答
52 浏览
提问于 2025-04-14 15:23

我在使用pandas 2.0.3版本的时候想要计算平均值,但在pandas 0.23.3版本中没有这个问题。

df.mean()

我遇到了以下错误:

ValueError: 无法将字符串转换为浮点数

为了解决这个问题,我使用了:

df.describe().mean()

这个问题的原因是什么呢?

3 个回答

0

你遇到的问题是因为你在尝试计算一个包含非数字列的 DataFrame 的平均值。pandas' mean() 函数会试图把所有数据转换成浮点数来计算平均值。如果你的 DataFrame 中有非数字的数据列(比如字符串),你就会收到一个 ValueError: could not convert string to float 的错误。

不过,pandas 的 describe() 函数只会返回 DataFrame 中数字列的描述性统计数据,而忽略非数字列。所以当你调用 describe().mean() 时,其实是在对数字列的描述性统计数据进行平均。

根据官方的 pandas 文档,链接

对于通过 DataFrame 提供的混合数据类型,默认情况下只返回数字列的分析。如果 DataFrame 只包含对象和分类数据而没有任何数字列,默认会返回对象和分类列的分析。如果提供了 include='all' 作为选项,结果将包含每种类型的属性的联合。

0

哦,我明白发生了什么了。你需要检查一下浮点数的值,确保里面没有逗号或者其他字符。可以用 .Replace 函数来去掉那些多余的字符。

编辑 ** 还有一个 to_numeric 函数。

这个错误的意思是聚合函数无法处理这些数据,因为数据类型不匹配。这种情况可能是因为数据行的表示不正确,没被当作浮点数处理,或者里面有其他的字符。

之所以用“Describe”能正常工作,是因为默认情况下,describe 会排除非数字和 NaN 的行。

DataFrame.mean(axis=0, skipna=True, numeric_only=False, **kwargs) 我在想 Pandas 的 .mean() 函数的默认行为是否和之前的版本不同。试着把 numeric_only 设置为 true。

0

看起来你有一些列的数据类型是字符串,而在这些列上是无法计算平均值的。因此,根据文档,你可以设置numeric_only=True,这样就只会对数字列计算平均值。

df.mean(numeric_only=True)

根据pandas 0.23.3的文档,你在使用平均值时没有遇到错误的原因是numeric_only参数的默认值是None。以下是pandas 0.23.3中关于numeric_only的解释:

numeric_only : 布尔值,默认值为 None

只包括浮点数、整数和布尔类型的列。如果是 None,将尝试使用所有数据,然后只使用数字数据。此功能未在 Series 中实现。

而在pandas 2.0.3中,默认值是False,这意味着会包含所有类型的数据列。以下是pandas 2.0.3文档中的解释:

numeric_only : 布尔值,默认值为 False

只包括浮点数、整数和布尔类型的列。此功能未在 Series 中实现。

撰写回答