+-
为什么熊猫daframe.shape没有括号?

我是ML和大熊猫的新手。

我正在查看线性回归程序的jupyter文件。我在那里看到

dataframe.head()dataframe.describe()dataframe.shape

为什么前两个为什么有括号()而形状没有?

我尝试运行dataframe.shape(),并显示错误TypeError: 'tuple' object is not callable.

这里是文档的链接,但没有帮助:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shape.html

dataframe.shape看起来像一个函数,函数应该具有()。如何知道某个函数何时没有()

2
投票

类可以具有属性和方法,属性是.word,而方法是.word()或.word(arg1,arg2等。]

您不会事先知道您要调用的对象是方法还是属性,但是如果您阅读该类的文档,就会知道。在该文档中,形状是在属性下而不是方法下列出的,因此您可以从该分类中推断出如何使用它(即不带括号)。这是熊猫数据框的doc链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html

养成阅读文档的习惯,它将为您节省很多头痛!

1
投票

这是一个Python问题,不仅限于熊猫。 Python使用括号作为语法糖来“调用”您在其后发起括号的对象。

假设您有一些对象a(虽然可以调用函数,但不必是一个函数)。然后,在其后加上括号以“调用” a

a()

如果a是“可调用的”,它将执行某些操作。否则,您将得到一个错误。

我将定义一个简化的class并显示会发生什么:

class A():
    pass

a = A()
a()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-353-d08e164f0b26> in <module>
      3 
      4 a = A()
----> 5 a()

TypeError: 'A' object is not callable

但是,我可以通过定义方法a使__call__可调用

class A():
    def __call__(self):
        return "Hello World!"

a = A()
a()

'Hello World!'

为了回答您的问题,df.shape没有__call__方法。这对于大多数attributes类实例都是常见的,并且对于df.shape绝对是正确的。