在Jupyter Notebook或终端中,df.head和df.head()都可以返回数据帧的输出,但有一些细微差别。这两个不同表达式之间的根本区别是什么?括号通常在Python中扮演什么角色? 谢谢!
>>>df.head
<bound method NDFrame.head of Date Open High Low Close Volume
0 1-Jun-17 153.17 153.33 152.22 153.18 16404088
1 2-Jun-17 153.58 155.45 152.89 155.45 27770715
2 5-Jun-17 154.34 154.45 153.46 153.93 25331662
3 6-Jun-17 153.90 155.81 153.78 154.45 26624926
4 7-Jun-17 155.02 155.98 154.48 155.37 21069647
5 8-Jun-17 155.25 155.54 154.40 154.99 21250798
6 9-Jun-17 155.19 155.19 146.02 148.98 64882657
7 12-Jun-17 145.74 146.09 142.51 145.42 72307330
8 13-Jun-17 147.16 147.45 145.15 146.59 34165445
9 14-Jun-17 147.50 147.50 143.84 145.16 31531232
10 15-Jun-17 143.32 144.48 142.21 144.29 32165373
>>> df.head()
Date Open High Low Close Volume
0 1-Jun-17 153.17 153.33 152.22 153.18 16404088
1 2-Jun-17 153.58 155.45 152.89 155.45 27770715
2 5-Jun-17 154.34 154.45 153.46 153.93 25331662
3 6-Jun-17 153.90 155.81 153.78 154.45 26624926
4 7-Jun-17 155.02 155.98 154.48 155.37 21069647
答案 0 :(得分:5)
这些不只是“微小差异”。实际上,您df.head
根本没有采取任何行动。
df.head()
实际上占据数据帧的开头。您可以看到输出只有5行:
>>> df.head()
Date Open High Low Close Volume
0 1-Jun-17 153.17 153.33 152.22 153.18 16404088
1 2-Jun-17 153.58 155.45 152.89 155.45 27770715
2 5-Jun-17 154.34 154.45 153.46 153.93 25331662
3 6-Jun-17 153.90 155.81 153.78 154.45 26624926
4 7-Jun-17 155.02 155.98 154.48 155.37 21069647
相反,df.head
只是数据帧head
的{{1}}方法的方法对象。需要括号才能实际调用该方法。方法对象的df
基本是
repr
,在适当的位置替换了对象的类名称,方法名称和f"<bound method {classname}.{methodname} of {object!r}"
。实际上,看起来像数据帧的输出部分是原始repr
的{{1}}。它有10行而不是5行,因为它是整个原始数据帧,而不是头部。
答案 1 :(得分:0)
括号用于调用函数。让我们举一个append
的小例子,仅在列表上不带括号的情况下使用它就不会做任何事情,因为它只会返回函数本身,而是使用括号来调用函数:
a = [1]
a.append
print(a)
[1]
a.append(2)
print(a)
[1, 2]
append = a.append
append(3)
print(a)
[1, 2, 3]
仅使用head
时会看到类似的结果。他们只是添加了一些代码以使用默认值实际调用该函数。
答案 2 :(得分:0)
head
返回method
head()
返回数据框中的前5(默认)行
type(df.head)
<class 'method'>
type(df.head())
<class 'pandas.core.frame.DataFrame'>