
我是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看起来像一个函数,函数应该具有()。如何知道某个函数何时没有()
投票
类可以具有属性和方法,属性是.word,而方法是.word()或.word(arg1,arg2等。]
您不会事先知道您要调用的对象是方法还是属性,但是如果您阅读该类的文档,就会知道。在该文档中,形状是在属性下而不是方法下列出的,因此您可以从该分类中推断出如何使用它(即不带括号)。这是熊猫数据框的doc链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html
养成阅读文档的习惯,它将为您节省很多头痛!
投票
这是一个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绝对是正确的。