【发布时间】:2017-10-07 12:22:58
【问题描述】:
Numpy 函数,例如 np.mean()、np.var() 等,接受类似数组的参数,例如 np.array 或 list 等。
但传入 pandas 数据框也可以。这意味着 pandas 数据框确实可以将自己伪装成一个 numpy 数组,我觉得这有点奇怪(尽管知道 df 的底层值确实是 numpy 数组)。
对于一个类似于数组的对象,我认为它应该可以使用整数索引进行切片,就像切片 numpy 数组一样。因此,例如 df[1:3, 2:3] 应该可以工作,但会导致错误。
因此,当数据框进入函数内部时,可能会转换为 numpy 数组。但如果是这样的话,为什么 np.mean(numpy_array) 会导致与 np.mean(df) 不同的结果?
a = np.random.rand(4,2)
a
Out[13]:
array([[ 0.86688862, 0.09682919],
[ 0.49629578, 0.78263523],
[ 0.83552411, 0.71907931],
[ 0.95039642, 0.71795655]])
np.mean(a)
Out[14]: 0.68320065182041034
给出的结果与下面给出的不同......
df = pd.DataFrame(data=a, index=range(np.shape(a)[0]),
columns=range(np.shape(a)[1]))
df
Out[18]:
0 1
0 0.866889 0.096829
1 0.496296 0.782635
2 0.835524 0.719079
3 0.950396 0.717957
np.mean(df)
Out[21]:
0 0.787276
1 0.579125
dtype: float64
前一个输出是单个数字,而后者是按列的平均值。 numpy 函数如何知道数据框的构成?
【问题讨论】:
-
要使用底层数组数据,我们需要使用
.values。没有它,它就不完全是数组数据。结果应该与 NumPy funcs 一致。