我是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
看起来像一个函数,并且函数应具有()
。
如何知道某个函数何时没有()
答案 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
来说绝对是正确的。