gpt4 book ai didi

python - numpy 函数如何在内部对 pandas 对象进行操作?

转载 作者:太空狗 更新时间:2023-10-29 21:48:37 25 4
gpt4 key购买 nike

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 函数如何知道数据框的构成?

最佳答案

如果您逐步执行此操作:

--Call--
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2796)mean()
-> def mean(a, axis=None, dtype=None, out=None, keepdims=False):
(Pdb) s
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2877)mean()
-> if type(a) is not mu.ndarray:
(Pdb) s
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2878)mean()
-> try:
(Pdb) s
> d:\winpython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\numpy\core\fromnumeric.py(2879)mean()
-> mean = a.mean

您可以看到 type 不是 ndarray,因此它会尝试调用 a.mean,在本例中为 df.mean():

In [6]:

df.mean()
Out[6]:
0 0.572999
1 0.468268
dtype: float64

这就是输出不同的原因

重现上面的代码:

In [3]:
a = np.random.rand(4,2)
a

Out[3]:
array([[ 0.96750329, 0.67623187],
[ 0.44025179, 0.97312747],
[ 0.07330062, 0.18341157],
[ 0.81094166, 0.04030253]])

In [4]:
np.mean(a)

Out[4]:
0.52063384885403818

In [5]:
df = pd.DataFrame(data=a, index=range(np.shape(a)[0]),
columns=range(np.shape(a)[1]))

df

Out[5]:
0 1
0 0.967503 0.676232
1 0.440252 0.973127
2 0.073301 0.183412
3 0.810942 0.040303

numpy 输出:

In [7]:
np.mean(df)

Out[7]:
0 0.572999
1 0.468268
dtype: float64

如果您调用 .values 返回一个 np 数组,那么输出是相同的:

In [8]:
np.mean(df.values)

Out[8]:
0.52063384885403818

关于python - numpy 函数如何在内部对 pandas 对象进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43865602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com