为什么pandas中的DataFrame统计方法返回Series?

0 投票
1 回答
545 浏览
提问于 2025-04-18 13:46

我正在使用 pandas 0.13.1 版本。这个数据框:

a = pandas.DataFrame({"a": ["foo", "bar", "qux"], "v": [1, 5.6, 50.5]})
a = a.set_index("a")

里面有一些浮点数,我们可以用 .mean() 来计算它们的平均值:

>>> a.mean()
v    19.033333
dtype: float64
>>> type(a.mean())
pandas.core.series.Series

但是在 pandas 0.13.1 中,这个结果是一个 Series 而不是一个 float,这是为什么呢?这是 pandas 的新特性吗?我记得在旧版本的 pandas 中不是这样的。

那么,获取浮点数的正确方法是什么呢?

>>> a.mean()[0]

1 个回答

1

如果你的数据有多列,使用 df.mean() 这个命令会给每一列计算一个平均值。所以你可以用 a.mean()['v'] 来获取平均值中 'v' 这一列的值,或者用 a['v'].mean() 来计算 'v' 这一列的平均值,这两种方式都是最清晰的表达方式。

如果你想把数据当作一个整体来看(也就是让数据只显示一列),最好的方式是把它表示为一个 Series。

另外,如果你想计算所有列的平均值,可以这样做:

  • df.mean().mean() (先计算每一列的平均值,再计算这些平均值的平均)
  • df.mean(axis=0).mean() (先计算每一行的平均值,再计算这些平均值的平均)
  • df.as_matrix().mean() (计算整个矩阵的平均值,这个矩阵是 pandas 返回的 numpy 矩阵/二维数组)
  • df.values.mean() (和上面一样,可能会更快,但不太清晰,因为这是 pandas 内部用 numpy 数组表示的)

撰写回答