Python 使用NumPy函数修改数据帧

Python 使用NumPy函数修改数据帧,python,numpy,pandas,Python,Numpy,Pandas,假设我有一个名为“table”的数据框架,其中有两列名为“a”和“b”: 现在,当我正确计算sin倒数时,我得到了如下结果 >>> np.arcsin( table.a/table.b) 0 0.224322 1 NaN 2 NaN 3 0.121628 4 0.152785 dtype: float64 但当我错误地这样做时(注意上面是arcin(y/x),而下面是arcin(y,x)) 导致我心脏病发作的原因是错误的Nu

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

现在,当我正确计算sin倒数时,我得到了如下结果

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

0    0.224322
1         NaN
2         NaN
3    0.121628
4    0.152785
dtype: float64
但当我错误地这样做时(注意上面是
arcin(y/x)
,而下面是
arcin(y,x)

导致我心脏病发作的原因是错误的NumPy操作修改了
,即使我使用的是上面的

>>> 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应该修改数据帧?任何学术见解都将不胜感激


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

的可选第二个参数是输出数组。如果给函数两个参数,它将取第一个参数中值的反正弦,并将它们写入第二个参数

当您有一个大型阵列,并且希望在不释放和重新分配内存的情况下重用内存时,提供此模式是为了提高效率


所以,是的,这是预期的行为。如果不希望覆盖第二个参数,请注意不要提供两个参数。您可能一直在考虑这个函数,它接受两个输入参数(以及输出数组的可选第三个参数)。但这是唯一一个接受两个输入参数的三角函数。

我无法重现这一点。对pandas.DataFrame的操作应始终返回一个新对象。您能否创建一个显示此行为的最小完整示例?我仍然无法重现此情况。你的操作系统是什么,python版本,numpy版本,pandas版本:Ubuntu 14.04.3 LTS python:2.7.10 numpy:1.9.2 pandas:0.16.2 Repo:Anaconda 2.2.0 Ipython:3.0.0。Enter vs Shift Enter是多次编辑的罪魁祸首。IMHO这将是使用仅关键字参数的好时机,因此如果需要,您必须指定
out=
。但是现在这艘船可能已经开始改变API了。为了完成这一点,我想补充一点:当.values未使用时,我尝试执行[
numpy.arcin(table.a,table.b)
]它抛出[
TypeError:return数组必须是ArrayType
],这是可以理解的。但是,即使没有直接输入数据,也能修改原始数据帧,这是我需要注意的。我完全没有注意到第二次调用的是
,而不是
/
@MaxNoe,不用担心!每一个错误都能教会我们一些东西。我学习了最小完整示例。
>>> np.arcsin( table.a.values,table.b.values)
array([ 0.28848814,         nan,         nan, -0.08358827,  0.28616372])
>>> 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