pandas 方法中的有趣行为

Funny behavior in method of pandas

我在我的 IPython window 中使用 pandas,但我不小心忘记在 pandas groupby 对象的方法调用后添加括号:

In [68]: df_first.groupby('build_number').std
Out[68]: <bound method DataFrameGroupBy.std of <pandas.core.groupby.DataFrameGroupBy object at 0x7f2742f930d0>>

但是,我没有收到可能告诉我遗漏括号的错误或异常,而是在 Out[68] 中收到了消息。加上括号后,我得到了预期的输出:

In [69]: df_first.groupby('build_number').std()
Out[69]: 
                     cycles
build_number               
1300          108044.174347
1301          108041.973597
1302          108042.702563
1303          108043.290047
1304          108043.024902
1305          108042.704441

In [70]: 

所以我很好奇为什么我之前忘记了()却没有报错。这是 pandas 中的错误吗?

谢谢。

与pandas无关。当你使用括号时,你调用括号之前的任何内容。如果你不使用括号,你只是把那个对象作为一个对象来获取,不管它是什么。在这种情况下,您有 df_first.groupby('build_number').std,这是一个方法对象。

您可以看到与 pandas 无关的各种其他函数和方法的相同行为:

>>> len
<built-in function len>
>>> list.index
<method 'index' of 'list' objects>
>>> ''.join
<built-in method join of str object at 0x0000000001C93148>

省略括号不一定是错误。它允许您将 function/method/callable 本身作为一个对象来引用,以便存储并可能稍后调用。