为什么pandas中的DataFrame统计方法返回Series?
我正在使用 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 数组表示的)