Python 为什么iloc使用[]而不是()?
我对python比较陌生,在我看来(可能是因为我不理解),语法有时有点不一致 假设我们正在使用pandas包Python 为什么iloc使用[]而不是()?,python,pandas,Python,Pandas,我对python比较陌生,在我看来(可能是因为我不理解),语法有时有点不一致 假设我们正在使用pandas包将pandas导入为pd。然后可以通过pd.method访问此包中的任何方法,即pd.DataFrame(…)。现在,pandas包中的某些对象具有某些方法,即df.reindex()(请注意圆括号),或某些属性,即df.columns(请注意无括号) 我的问题有两个: 首先,我上面说的对吗 其次,为什么iloc方法不维护上述语法?如果这是一种方法,那么我肯定应该使用df.iloc(0,0
将pandas导入为pd
。然后可以通过pd.method
访问此包中的任何方法,即pd.DataFrame(…)
。现在,pandas包中的某些对象具有某些方法,即df.reindex()
(请注意圆括号),或某些属性,即df.columns
(请注意无括号)
我的问题有两个:
首先,我上面说的对吗
其次,为什么iloc
方法不维护上述语法?如果这是一种方法,那么我肯定应该使用df.iloc(0,0)
而不是df.iloc[0,0]
来获得数据帧的左上角值
谢谢
将熊猫作为pd导入
这里是python模块
pd.DataFrame(…)
如果您注意命名对流DataFrame
在这里是一个类
df.reindex()
是对实例本身调用的方法
df.columns
没有括号,因为它是对象的属性而不是方法
df.iloc
是通过索引来获取项目的,因此显示其可索引性质[]
在这里更有意义 是的,您在概念上是正确的,如果它是可调用的,则应该使用()
而不是[]
来调用,无论它是否是可切片的。这正是引擎盖下发生的事情。例如:
>>> lst = [1,2,3,4]
# slicing:
>>> lst[1:3]
... [2, 3]
# calling magic __getitem__ :
>>> lst.__getitem__(slice(1,3))
... [2, 3]
因此,在引擎盖下,在任何可切片对象中切片都可以使用dunder getitem方法或类似的方法。然而,这个\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。此外,这些dunder
方法或magic
在日常编程中会非常麻烦,而像[…]
或简单的+
(这也是一种名为\uu add\uuu
的magic
)更易于键入、直观,并且与框架的其余部分很好地融合。因此,.iloc
与[…]
一起使用,而不是方法调用
如果您有时间,我想让您参考索引
上的pandas源代码,尝试查找\u LocationIndexer
:,因为它是索引,所以它们使用与索引到列表相同的语法。任何可调用的,都使用()来调用(即方法或函数)。任何可索引的东西都使用[]来索引(即列表/数组/集合等)@BlueRine S但是可调用的df.iloc
也是可切片的,而OP没有understand@Jab然后,您应该向OP进一步解释OOP的底层核心。也许可以用神奇的方法展示一个例子。@jornsharpe,但是键入df.iloc([0,0])
是否更有意义呢。在我看来,如果这是一种方法,我应该总是需要()。。。