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

时间:2020-03-25 18:44:31

标签: python pandas

我是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 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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来说绝对是正确的。