问题描述
一个简单的数据框
arr1 = pd.Dataframe{"name" : ["x","y"," z]
"Score" : [20,30,40]}
要将其转换为 numpy,我们可以使用
arr2 = arr1.to_numpy()
type(arr2)
它给出了 numpy 类型。 但是当我们不使用括号时,它给出了“方法”
arr2 = arr1.to_numpy
type(arr2)
Method
在转置中我们不使用括号
arr2.T
所以我的问题是使用括号创建的区别是什么,为什么在转置等一些函数之后我们不使用括号?
解决方法
因为 .T 是 property
,not
是 {{1 }} 和 method
旨在让您可以选择使 properties
像 zero-argument methods
一样可访问。
使用括号调用方法,省略它们只是对方法本身的引用。
据我所知,您确实在转置后使用括号。 当你输入
x = np.ones((1,2,3))
np.transpose(x,(1,2)).shape
(2,1,3)
您正在使用括号。您正在使用它们来传递参数,但它们就在那里。
当您在方法后键入空括号时,您正在调用该方法,并且不向它传递任何内容。 一般来说,这是因为它是在它之前的对象上调用的实例方法,即
arr2 = arr1.to_numpy()
type(arr2)
to_numpy
是一种在使用 Pandas 时可用于数组的方法。
type()
是一个独立的方法,它接受一个参数(您传递给它的对象,在本例中为 arr2
)并返回该对象的类型。
arr2.T
是简写。它与 arr2.Transpose()
相同。
编辑:@PIG208 在评论部分指出:
T
可能是一个带有 getter 的属性,它调用转置并返回值,而 {{1} } 本身是一个可调用的。
这是对我称之为“速记”的更好解释。
,to_numpy()
是 pandas.DataFrame
类的一个方法,它可以访问数据帧的所有内部属性,因此在某些用例中它不需要任何参数。尽管您仍然可以根据文档指定参数:enter link description here
现在 numpy.ndarray.T
是数组的一个属性,所以它不应该接受任何参数。