gpt4 book ai didi

python - 通过 NumPy 函数修改的 Pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:46 25 4
gpt4 key购买 nike

假设我有一个名为“table”的数据框,其中包含名为“a”和“b”的两列:

>>> import numpy as np
>>> import numpy.random as rd
>>> import pandas as pd
>>> x = rd.normal(0,1,(2,5))
>>> table = pd.DataFrame({'a':x[0], 'b':x[1]})

>>> table[['a','b']]
a b
0 0.284503 1.278977
1 -1.088041 0.688201
2 1.205980 0.182008
3 -0.083491 -0.688141
4 0.282274 1.854735

现在,当我正确计算 sin-inverse 时,我得到了预期的结果。

>>> np.arcsin( table.a/table.b)

0 0.224322
1 NaN
2 NaN
3 0.121628
4 0.152785
dtype: float64

但是当我错误地这样做时(注意上面是 arcsin(y/x) 而下面我做的是 arcsin(y, x) ),

>>> np.arcsin( table.a.values,table.b.values)
array([ 0.28848814, nan, nan, -0.08358827, 0.28616372])

让我心脏病发作的是不正确的 NumPy 操作修改了 table,即使我在上面使用 .values

>>> table[['a','b']]
a b
0 0.284503 0.288488
1 -1.088041 NaN
2 1.205980 NaN
3 -0.083491 -0.083588
4 0.282274 0.286164

您会看到 b 列已修改。

这是预期的行为吗?为什么 NumPy 应该修改数据框?任何学术见解将不胜感激。

我想为什么我首先会尝试以错误的方式调用函数的问题在这里不是很重要。我担心的是不要在未来不知不觉中为其他功能重复类似的错误。

最佳答案

numpy.arcsin 的可选第二个参数是一个输出数组。如果您为函数提供两个参数,它会取第一个参数值的反正弦值并将它们写入第二个参数。

当您有一个大数组并希望在不取消分配和重新分配内存的情况下重用内存时,提供此模式是为了提高效率。

所以,是的,这是预期的行为。如果您不想覆盖第二个参数,请注意不要提供两个参数。你可能一直在想 numpy.arctan2函数,它确实接受两个输入参数(以及输出数组的可选第三个参数)。但这是唯一一个采用两个输入参数的三角函数。

关于python - 通过 NumPy 函数修改的 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33817698/

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